• @AspectJ注解配置切面编程(注解方式)


    搭建环境

    新建web项目 spring4_day03_annotation , 引入依赖
    pom.xml

    
    		<dependency>
    			<groupId>org.springframeworkgroupId>
    			<artifactId>spring-contextartifactId>
    		dependency>
    		
    		
    		<dependency>
    			<groupId>org.springframeworkgroupId>
    			<artifactId>spring-aspectsartifactId>
    		dependency>
    
    		
    		<dependency>
    			<groupId>junitgroupId>
    			<artifactId>junitartifactId>
    			<scope>testscope>
    		dependency>
    
    		
    		<dependency>
    			<groupId>org.slf4jgroupId>
    			<artifactId>slf4j-log4j12artifactId>
    		dependency>
    		
    		
    		<dependency>
    			<groupId>org.springframeworkgroupId>
    			<artifactId>spring-testartifactId>
    			<version>4.3.13.RELEASEversion>
    		dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    同时导入
    applicationContext.xml,
    log4j.properties到工程

    第一步: 编写目标对象 (bean)、spring容器、测试类

    (1):创建接口CustomerService.java

    第二步: 编写通知,配置切面

    1) 编写通知类,在通知类 添加@Aspect 注解,代表这是一个切面类,并将切面类交给spring管理(能被spring扫描到@Component)。
    @Component(“myAspect”):将增强的类交给spring管理,才可以增强
    @Aspect:将该类标识为切面类(这里面有方法进行增强),相当于

    前置通知

    在切面的类MyAspect.java类中添加通知方法@Before(),
    方案一:可以直接将切入点的表达式写到@Before()中

    	//前置通知
    	//相当于:
        //@Before("bean(*Service)"):参数值:自动支持切入点表达式或切入点名字
    	@Before("bean(*Service)")
    	public void before(JoinPoint joinPoint){
    		System.out.println("=======前置通知。。。。。");
    	}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    方案二:可以使用自定义方法,使用@Pointcut 定义切入点
    切入点方法的语法要求:
    切点方法:private void 无参数、无方法体的方法,方法名为切入点的名称
    一个通知方法@Before可以使用多个切入点表达式,中间使用“||”符合分隔,用来表示多个切入点

        //自定义切入点
    	//方法名就是切入点的名字
    	//相当于
    	@Pointcut("bean(customerService)")
    	private void myPointcut(){}
    	//自定义切入点
    	//方法名就是切入点的名字
    	//相当于
    	@Pointcut("bean(productService)")
    	private void myPointcut2(){}
    	
    	
    	//前置通知
    	//相当于:
    	//相当于:
    	@Before("myPointcut()||myPointcut2()")
    	public void before(JoinPoint joinPoint){
    		System.out.println("=======前置通知。。。。。");
    	}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    后置通知

    在切面的类MyAspect.java类中添加通知方法

    环绕通知

    在切面的类MyAspect.java类中添加通知方法

    抛出通知

    在切面的类MyAspect.java类中添加通知方法

    最终通知

    在切面的类MyAspect.java类中添加通知方法

  • 相关阅读:
    SpringCloud——什么是微服务
    java开发IP 属地功能
    计算机毕业设计Java家用饰品在线销售系统(源码+系统+mysql数据库+lw文档)
    2022合肥站 G-Game Plan
    【java学习】项目: ATM系统
    Java 线程详解
    C语言--每日五道选择题--Day12
    CRM帮助企业解决客户关系管理难题
    LeetCode 242 - 有效的字母异位词
    #POWERBI_指标监控(第二部分,周期内下降天数及日期明细)
  • 原文地址:https://blog.csdn.net/djydjy3333/article/details/126907529