tengo una definición de frijol en primavera y su homólogo de proxy que está destinado a ser utilizado en todas partes:ApplicationContext.getBean (clazz Clase) no va bien con los proxies
<bean name="my.Bean" class="org.springframework.aop.framework.ProxyFactoryBean" scope="prototype">
<property name="proxyInterfaces" value="my.Interface"/>
<property name="target" ref="my.BeanTarget"/>
<property name="interceptorNames">
<list>
<value>someInterceptor</value>
</list>
</property>
</bean>
<bean name="my.BeanTarget" class="my.InterfaceImpl" scope="prototype">
<property name="foo" ref="bar"/>
</bean>
Todo esto funciona bien; y en el mundo v3 pre-primavera lo estaba utilizando como
ApplicationContext ctx = ...;
my.Interface foo = (my.Interface) ctx.getBean("my.Bean"); // cast is necessary
En primavera 3 se hizo posible realizar búsquedas seguras tipo, por ejemplo:
my.Interface foo = ctx.getBean(my.Interface.class);
Una vez más, esto funciona bien para los granos ordinarios mientras que para Proxied beans Me estoy poniendo my.BeanTarget
en lugar de my.Bean
. He tratado de inline my.BeanTarget
(como se muestra en la documentación de primavera) para que sea oculto, pero todo lo que me dieron fue
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [my.Interface] is defined: expected single bean but found 0:
lo tanto, es posible utilizar las búsquedas de tipo de frijol seguras con granos de proxy y si es así - ¿cómo?
¿Realmente necesita interactuar directamente con el contexto? La mayoría de mis aplicaciones solo necesitan arrancarlo y todo lo demás se maneja con inyección de dependencia (que funciona para beans proxies). He terminado algunas cosas sobre el framework donde necesitaba acceder al contexto, pero, en mi experiencia, era raro. – SteveD
Nuestro sistema es bastante amplio y algunos bits y clases no nacen en Spring (ni puede serlo), por lo que deben usar beanFactory/appCtx para obtener las dependencias necesarias. – mindas