网上有几个不错的文章,参考下
写个不用xml的
被织入的class
public class Person {
public void say (){
System.out .println("say.........." );
}
}
adivce
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class SayAop implements MethodInterceptor {
@Override
public Object invoke (MethodInvocation invocation) throws Throwable {
System.out.println("before" );
Object retVal = invocation.proceed();
System.out.println("after" );
return retVal;
}
}
测试通过
package com .cor .test
import org.aopalliance .aop .Advice
import org.junit .Test
import org.springframework .aop .Advisor
import org.springframework .aop .framework .ProxyFactory
import org.springframework .aop .support .DefaultPointcutAdvisor
import org.springframework .aop .support .JdkRegexpMethodPointcut
import com .cor .aop .SayAop
import com .cor .common .Person
public class AopTest {
@Test
public void test() {
Person one = new Person()
Person proxyOne
JdkRegexpMethodPointcut pc = new JdkRegexpMethodPointcut()
pc.setPattern (".*say.*" )
Advice advice = new SayAop()
Advisor advisor = new DefaultPointcutAdvisor(pc, advice)
// 创建BeanOne代理
ProxyFactory pf1 = new ProxyFactory()
pf1.addAdvisor (advisor)
pf1.setTarget (one)
proxyOne = (Person) pf1.getProxy ()
proxyOne.say ()
}
}
写个用 xml的
定义一个接口,接口方法被织
public interface Sleep {
public void sleep ();
}
实现接口
public class Human implements Sleep {
@Override
public void sleep () {
System.out.println("睡觉.........." );
}
}
advice
package com.cor.aop;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
public class SleepHelper implements MethodBeforeAdvice , AfterReturningAdvice {
@Override
public void afterReturning (Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {
System.out.println("穿衣服" );
}
@Override
public void before (Method arg0, Object[] arg1, Object arg2)
throws Throwable {
System.out.println("脱衣服" );
}
}
xml配置
<bean id ="sleepHelper" class ="com.cor.aop.SleepHelper" >
</bean>
<bean id ="sleepAdvisor"
class ="org.springframework.aop.support.RegexpMethodPointcutAdvisor" >
<property name ="advice" ref ="sleepHelper" />
<property name ="pattern" value=".*sleep" />
</bean>
<bean id ="human" class ="com.cor.common.Human" >
</bean>
<bean
class ="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />
注入通过测试
@Autowired
private Sleep human;
human.sleep();