|
From: Rod J. <rod...@in...> - 2003-11-20 17:42:11
|
Mark, > Is it possible to apply an interceptor to a prototype bean? Yes. > The prototype is stateful - i.e one per user Yes, Spring supports mixins, ie one interceptor per mixin instance. > I have defined the following in applicationContext.xml > > > <bean id="TestTarget" class="test.MyTarget" singleton="false"> > </bean> > > > <bean id="TestInterceptor" > class="org.springframework.transaction.interceptor.TransactionProxyFactoryBe > an" singleton="false"> > <property name="transactionManager"><ref > local="transactionManager"/></property> > > <property name="target"><ref local="TestTarget"/></property> > > > <property name="transactionAttributes"> > <props> > <prop key="foo">PROPAGATION_REQUIRED</prop> > </props> > </property> > </bean> > > > > When I invoke the method foo I get a ClassCastException Not sure why this is happening but you may need to create the interceptor chain manually to use a prototype, as TransactionProxyFactoryBean propably assumes it's dealing with a singleton. So you need to create a chain that includes: - the name of your prototype - the interceptor names, which may be singletons or prototypes as you require. Use a prototype for mixin support. The following example comes from the test suite, with minor changes to make it more obvious: <bean id="prototypeTarget" class="org.springframework.aop.interceptor.SideEffectBean" singleton="false"> <property name="count"><value>10</value></property> </bean> <!-- This can be a singleton or a prototype (for mixin behaviour) --> <bean id="debugInterceptor" class="org.springframework.aop.interceptor.DebugInterceptor"> </bean> <bean id="prototype" class="org.springframework.aop.framework.ProxyFactoryBean"> <!-- will automatically create invoker interceptor for the prototype --> <property name="interceptorNames"><value>debugInterceptor,prototypeTarget</value></pro perty> <!-- Note this --> <property name="singleton"><value>false</value></property> </bean> There is a bug in M2 to do with prototype AOP handling, which is fixed in the forthcoming M3. However I don't think it should affect you in such a simple usage. Regards, Rod |