AOP切面

AOPxml说明


      来声明要对 aop 进行配置
          它是用于声明切点(简单说就是对哪些方法进行拦截)
              定义传统的 aop 的切面,传统的 aop 切面它只能包含一个切点与一个增强
           定义 aspectj 框架的切面.,它可以包含多个切点与多个通知
     如果切面代码是自动注入的bean,那么的ref属性直接写bean的注入名字就可以了!

         范围代理
Spring中默认的Scope分为”singleton”和”prototype”两种。


   自动代理
proxy-target-class属性若此值为true强制使用CGLIB代理;
expose-proxy属性是为了目标对象内部的自我调用无法实施切面中增加

AOPXml简单配置

    
    
    
    
    
    

切入类 注意必须加@componet否则不能注入bean

@Component
@Aspect
public class LogAnnotationAspect {

    

        /*
                execution(* com.boolib.web.*.*(..))
        第一个*的位置: 任意的返回值类型
        第二个.. 任意层次      com.shxt开头 service结尾 的任意层次
        第三个位置 *Service监控 Service结尾的类或者接口
        第四个位置 *代表类下的所有的方法
        第五个位置 ..任意的形参个数和类型
     */

        //定义切入点
        @Pointcut("execution(* com.boolib.web.*.*(..))")
        private void allMethod() {
        }

        //针对指定的切入点表达式选择的切入点应用前置通知
        @Before("execution(* com.boolib.web.*.*(..))")
        public void before() {

        

            System.out.println("【注解-前置通知】:");
        }

        //访问命名切入点来应用后置通知
        @AfterReturning("allMethod()")
        public void afterReturn() {
            System.out.println("【注解-后置通知】:方法正常结束了");
        }

        //应用最终通知
        @After("allMethod()")
        public void after() {
            System.out.println("【注解-最终通知】:不管方法有没有正常执行完成,"
                    + "一定会返回的");
        }

        //应用异常抛出后通知
        @AfterThrowing("allMethod()")
        public void afterThrowing() {
            System.out.println("【注解-异常抛出后通知】:方法执行时出异常了");
        }
}

你可能感兴趣的:(AOP切面)