ho una definizione di fagioli in primavera e la sua controparte di proxy che è pensato per essere usato ovunque:ApplicationContext.getBean (Classe Clazz) non va bene con i proxy
<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>
Tutto questo funziona bene; e nel mondo v3 pre-Spring stavo usando come
ApplicationContext ctx = ...;
my.Interface foo = (my.Interface) ctx.getBean("my.Bean"); // cast is necessary
a Spring 3 è stato possibile fare tipo le ricerche sicure, ad esempio:
my.Interface foo = ctx.getBean(my.Interface.class);
Ancora una volta, questo funziona bene per i fagioli comuni, mentre per I bean proxy ottengono my.BeanTarget
anziché my.Bean
. Ho cercato di inline my.BeanTarget
(come indicato nella documentazione primavera) per rendere più nascosto, ma tutto quello che ho trovato era
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [my.Interface] is defined: expected single bean but found 0:
Quindi è possibile utilizzare le ricerche di tipo fagioli sicuri con fagioli proxy e se sì - come?
Hai davvero bisogno di interagire direttamente con il contesto? La maggior parte delle mie applicazioni hanno solo bisogno di riavviarlo e quindi tutto il resto viene gestito con l'integrazione delle dipendenze (che funziona per i bean con proxy). Ho fatto alcune cose del framework in cui ho avuto bisogno di accedere al contesto, ma, secondo la mia esperienza, era raro. – SteveD
Il nostro sistema è abbastanza ampio e alcuni bit e classi non nascono in Spring (né possono essere), quindi devono usare beanFactory/appCtx per ottenere le dipendenze necessarie. – mindas