通过实现BeanPostProcessor接口的postProcessBeforeInitialization和postProcessAfterInitialization方法,在初始化前后用代理对象加强原来的类
实现方式
语法: execution(<访问修饰符>? <返回类型> <方法名>(<参数>) <异常>) 举例:
@Aspect
public class MyAspectAnno{
...
}
@Before(value="execution(* top.linxz.java.UserDao(..))")
public void before(JoinPoint joinPoint){
//joinPoint就是切到的方法
}
@AfterReturning(value="execution(* top.linxz.java.UserDao(..))", returning="returning")
public void afterReturing(Object returning){
//这个returning就是拿到的返回值
}
@Around(value="execution(* top.linxz.java.UserDao(..))", returning="returning")
public Object afterReturing(ProceedingJoinPoint joinPoint){
System.out.println("环绕前通知")
Object obj=joinPoint.proceed();//执行目标方法,如果不调用,目标方法就被拦截了。
System.out.println("环绕后通知")
return obj;
}
@AfterThrowing(value="execution(* top.linxz.java.UserDao(..))",throwing="e")
public void afterThrowing(Throwable e){
}
@After(value="execution(* top.linxz.java.UserDao(..))")
public void afterThrowing(Throwable e){
}