Datei ApplicationContext.getBean(Class clazz) nicht gut gehen mit proxies

Habe ich eine bean-definition in Feder und proxy-Pendant, welches dazu gedacht ist, um überall eingesetzt werden:

<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>

Dies alles funktioniert gut; und in der pre-Spring-v3-Welt war ich es

ApplicationContext ctx = ...;
my.Interface foo = (my.Interface) ctx.getBean("my.Bean"); //cast is necessary

Im Frühjahr 3 wurde es möglich, sichere Typ-Suchvorgänge, z.B.:

my.Interface foo = ctx.getBean(my.Interface.class);

Wieder, das funktioniert gut für normale Bohnen in der Erwägung, dass für die weitergeleitete-Bohnen bin ich immer my.BeanTarget statt my.Bean. Ich habe versucht, inline - my.BeanTarget (wie gezeigt in der Spring-Dokumentation) machen es versteckt, aber alles was ich bekam war

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [my.Interface] is defined: expected single bean but found 0: 

So ist es möglich, sichere Typ-bean-lookups mit Proxy-beans und wenn ja, wie?

  • Tun Sie wirklich brauchen, um die Interaktion mit dem Kontext direkt? Die meisten meiner Anwendungen nur jemals brauchen, um bootstrap und dann alles andere wird behandelt mit dependency injection (das für die weitergeleitete-Bohnen). Ich bin schon einige framework-Sachen, wo habe ich Zugriff auf die Kontext -, aber, in meiner Erfahrung, war es selten.
  • Unser system ist sehr breit und einige bits und Klassen werden nicht geboren, im Frühling (noch sein kann), so müssen die beanFactory/appCtx um die benötigten Abhängigkeiten.
InformationsquelleAutor mindas | 2010-08-26
Schreibe einen Kommentar