本人写了个 spring AOP 小例子,结果却在意料之外,不知哪出了问题,还望指教!
接口:
package cla;
public interface Int {
public void show();
}
目标类:
package cla;
public class Mygoto implements Int {
public void show() {
System.err.println("目标");
}
}
通知类:
package cla;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.aop.framework.ProxyFactoryBean;
public class Advice implements MethodBeforeAdvice {
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
System.out.println("先执行我!");
}
}
xml 配置文档:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="advice" class="cla.Advice"></bean>
<bean id="my" class="cla.Mygoto"></bean>
<bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>cla.Int</value>
</property>
<property name="interceptorNames">
<list>
<value>advice</value>
</list>
</property>
<property name="target">
<ref bean="my"/>
</property>
</bean>
</beans>
测试类:
package cla;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Maintest {
public static void main(String[] args) {
ApplicationContext context=new FileSystemXmlApplicationContext("applicationContext.xml");
Int my= (Int)context.getBean("my");
my.show();
}
}
输出结果:
log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
log4j:WARN Please initialize the log4j system properly.
目标
应该在输出"目标" 前会输出"先执行我!", 可是却没有!