spring学习 十三 注解AOP

2021-05-19 15:31

阅读:737

标签:声明   package   strong   air   Plan   exec   npoi   port   bean   

  spring 不会自动去寻找注解,必须告诉 spring 哪些包下的类中可能有注解,也就是要开启注解扫描,注解的包是spring-context.jar,所以在配置文件中还要引入context约束,也就是引入 xmlns:context命名空间

第一步开始注解,base-package的属性值指定哪些包下可能有注解,多个包用逗号隔开,也可以采用通配符进行配置

 


    context:component-scan base-package="com.airplan.pojo,com.airplan.bean">context:component-scan>
    
    
    aop:aspectj-autoproxy proxy-target-class="true">aop:aspectj-autoproxy>

 

 

 

第二步:对要注册到spring器的类打上注解,例如@Service,@Component等

@Component  相当于,如果没有参数,把类名首字母变小写,相当于,也可以@Component(“自定义名称”)

我们对通知类,以及切点所在的类要打上注解
切点类:在方法上添加@Pointcut(“”) 定义切点

package com.airplan.pojo;

import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component("pointCutClass")
public class PointCutClass {
    /**
     * 声明切点
     * @param name01
     */
    @Pointcut("execution(* com.airplan.pojo.PointCutClass.*(..))")
    public void pointCutFun() {
        
        System.out.println("切点执行");
    }
}

 

通知类:@Aspect 相当于表示通知方法在当前类中,

@Before("com.bjsxt.test.Demo.demo1()")注解代表当前方法是前置通知,@Before注解中的值时切点的全路径

package com.airplan.pojo;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Component("advice")
@Aspect
public class Advice {
    
        @Before("com.airplan.pojo.PointCutClass.pointCutFun()")
        public void mybefore(String name){
            System.out.println("前置"+name );
            System.out.println("before");
        }
        
        
        
}

 

spring学习 十三 注解AOP

标签:声明   package   strong   air   Plan   exec   npoi   port   bean   

原文地址:https://www.cnblogs.com/cplinux/p/9742096.html


评论


亲,登录后才可以留言!