學習筆記
使用MethodInterceptor實現AOP
定義接口
public interface Interface {
public void hello();
}
兩個實現
- 第一個實現
public class InterfaceImpl implements Interface {
/**
* @see com.alipay.aop.BusinessInterface#hello()
*/
@Override
public void hello() {
System.out.println("AOP TEST!!");
}
}
- 第二個實現
public class InterfaceImplTest implements Interface {
/**
* @see aop.Interface#hello()
*/
@Override
public void hello() {
System.out.println("helo world!!");
}
}
- 實現自己的代理類,創建自己的interceptor
public class MyInterceptor implements MethodInterceptor {
/**
* @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
*/
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
String info = methodInvocation.getMethod().getDeclaringClass()+ "." +
methodInvocation.getMethod().getName() + "()";
System.out.println(info);
try{
Object result = methodInvocation.proceed();
return result;
}
finally{
System.out.println(info);
}
}
}
定義Spring配置文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:sofa="http://img.alipay.net/dtd/schema/service" xmlns:context="http://www.springframework.org/schema/context" xmlns:webflow="http://www.springframework.org/schema/webflow-config" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://img.alipay.net/dtd/schema/service http://img.alipay.net/dtd/schema/service/sofa-service.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd" default-autowire="byName"> <bean id="beanTarget" class="aop.InterfaceImpl"/> <bean id="hello" class="aop.InterfaceImplTest" /> <bean id="myInterceptor" class="aop.MyInterceptor"/> <bean id="bean" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>aop.Interface</value> </property> <property name="interceptorNames"> <list> <value>myInterceptor</value> <value>beanTarget</value> </list> </property> </bean> <bean id="testBean" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>aop.Interface</value> </property> <property name="interceptorNames"> <list> <value>myInterceptor</value> <value>hello</value> </list> </property> </bean> </beans>