spring学习 十三 注解AOP

Posted 阿瞒123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring学习 十三 注解AOP相关的知识,希望对你有一定的参考价值。

  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的注解方式都是采用cglib动态代理
         proxy-target-class="true"代表采用cglib动态代理
         false代表使用jdk的动态代理
     -->
    <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

 

 

 

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

@Component  相当于<bean/>,如果没有参数,把类名首字母变小写,相当于<bean id=””/>,也可以@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 相当于<aop: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的主要内容,如果未能解决你的问题,请参考以下文章

初步学习Spring Aop使用之注解方式

18spring注解学习(AOP)——AOP功能测试

Java框架spring Boot学习笔记(十三):aop实例操作

spring学习5:基于注解实现spring的aop

Spring AOP官方文档学习笔记之基于注解的Spring AOP

spring学习笔记AOP