zoukankan      html  css  js  c++  java
  • 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");
            }
            
            
            
    }
  • 相关阅读:
    缠中说禅 摘选
    laravel中不使用 remember_token时退出报错,如何解决?
    关于Ubuntu拒绝root用户ssh远程登录
    laravel中类似于thinkPHP中trace功能
    js原生语法实现表格操作
    使用clear来清除localStorage保存对象的全部数据
    JS设置CSS样式的集中方式
    thinkphp两表联查并且分页
    生于忧患,死于安乐 (先秦:孟子及其弟子)
    在对年轻人最不友好的环境中,刘裕起于阡陌,成就霸业
  • 原文地址:https://www.cnblogs.com/cplinux/p/9742096.html
Copyright © 2011-2022 走看看