public interface IOther {
public void doOther();
}
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.IntroductionInterceptor;
public class IChangeAdvisora implements IntroductionInterceptor,IOther{
public Object invoke(MethodInvocation m) throws Throwable {
if(implementsInterface(m.getMethod().getDeclaringClass())){
return m.getMethod().invoke(this, m.getArguments());
}else{
return m.proceed();
}
}
public boolean implementsInterface(Class intf) {
return intf.isAssignableFrom(IOther.class);
}
public void doOther() {
System.out.println("doOther in intrduction");
}
}
[b]beanconfig.xml[/b]
<bean id="somebean" class="cn.blogjava.introduction.Some" />
<bean id="ChangeAdvisor"
class ="IChangeAdvisora" />
<bean id="introAdvisor"
class="org.springframework.aop.support.DefaultIntroductionAdvisor">
<constructor-arg>
<ref bean ="ChangeAdvisor" />
</constructor-arg>
</bean>
<bean id="someIntroducedBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref ="somebean">
</property>
<property name="interceptorNames">
<list>
<value>[b]introAdvisor[/b]</value>
</list>
</property>
[color=red]<property name="proxyInterfaces">
<value>IOther</value>
</property>
<property name="proxyTargetClass">
<value>true</value>
</property> [/color]
<property name="optimize"><value>true</value>
</property>
</bean>