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");
            }
            
            
            
    }
  • 相关阅读:
    第8.13节 Python类中内置方法__repr__详解
    Python中splitlines方法判断文本中一行结束除了回车换行符是否还有其他字符?
    Python中使用eval执行下面函数的结果怎么是字符串'10020'?
    第8.12节 Python类中使用__dict__定义实例变量和方法
    ThinkPHP---thinkphp拓展之空操作
    ThinkPHP---TP功能类之邮件
    ThinkPHP---案例--实现知识管理功能
    ThinkPHP---TP功能类之公文管理功能2----------继续完善
    ThinkPHP---TP拓展之获取IP信息
    ThinkPHP---layer插件
  • 原文地址:https://www.cnblogs.com/cplinux/p/9742096.html
Copyright © 2011-2022 走看看