Spring - AOP之AspectJ(注解)

简介: Spring - AOP之AspectJ(注解)

image.pngimage.pngimage.pngPs:访问修饰符,可有可无。image.pngimage.pngPs:当然 JoinPoint 形参当中也可以去掉的。image.pngimage.pngPs:around方法返回值为 Object 是因为针对目标方法如果有返回值的情况。image.pngimage.pngimage.png

packagecom.imooc.aspectJ.demo1;
publicclassProductDao {
publicvoidsave(){
System.out.println("保存商品...");
    }
publicStringupdate(){
System.out.println("修改商品...");
return"hello";
    }
publicvoiddelete(){
System.out.println("删除商品...");
    }
publicvoidfindOne(){
System.out.println("查询一个商品...");
//int i = 1/0;    }
publicvoidfindAll(){
System.out.println("查询所有商品...");
//        int j = 1/0;    }
}
packagecom.imooc.aspectJ.demo1;
importorg.aspectj.lang.JoinPoint;
importorg.aspectj.lang.ProceedingJoinPoint;
importorg.aspectj.lang.annotation.*;
/*** 切面类*/@AspectpublicclassMyAspectAnno {
@Before(value="myPointcut1()")
publicvoidbefore(JoinPointjoinPoint){
System.out.println("前置通知=================="+joinPoint);
    }
@AfterReturning(value="myPointcut2()",returning="result")
publicvoidafterReturing(Objectresult){
System.out.println("后置通知=================="+result);
    }
@Around(value="myPointcut3()")
publicObjectaround(ProceedingJoinPointjoinPoint) throwsThrowable {
System.out.println("环绕前通知================");
Objectobj=joinPoint.proceed(); // 执行目标方法System.out.println("环绕后通知================");
returnobj;
    }
@AfterThrowing(value="myPointcut4()",throwing="e")
publicvoidafterThrowing(Throwablee){
System.out.println("异常抛出通知=============="+e.getMessage());
    }
@After(value="myPointcut5()")
publicvoidafter(){
System.out.println("最终通知==================");
    }
@Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.save(..))")
privatevoidmyPointcut1(){}
@Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.update(..))")
privatevoidmyPointcut2(){}
@Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.delete(..))")
privatevoidmyPointcut3(){}
@Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.findOne(..))")
privatevoidmyPointcut4(){}
@Pointcut(value="execution(* com.imooc.aspectJ.demo1.ProductDao.findAll(..))")
privatevoidmyPointcut5(){}
}
<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!--开启AspectJ的注解开发,自动代理--><aop:aspectj-autoproxy/><!--目标类--><beanid="productDao"class="com.imooc.aspectJ.demo1.ProductDao"/><!--定义切面--><beanclass="com.imooc.aspectJ.demo1.MyAspectAnno"/></beans>
packagecom.imooc.aspectJ.demo1;
importorg.junit.Test;
importorg.junit.runner.RunWith;
importorg.springframework.test.context.ContextConfiguration;
importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;
importjavax.annotation.Resource;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
publicclassSpringDemo1 {
@Resource(name="productDao")
privateProductDaoproductDao;
@Testpublicvoiddemo1(){
productDao.save();
productDao.update();
productDao.delete();
productDao.findAll();
productDao.findOne();
    }
}
运行结果:前置通知==================execution(voidcom.imooc.aspectJ.demo1.ProductDao.save())
保存商品...
修改商品...
后置通知==================hello环绕前通知================删除商品...
环绕后通知================查询所有商品...
最终通知==================查询一个商品...
目录
相关文章
|
20天前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
|
3天前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
Spring Aop该如何使用
|
9天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
30 4
SpringBoot必须掌握的常用注解!
|
23天前
|
存储 缓存 Java
Spring高手之路23——AOP触发机制与代理逻辑的执行
本篇文章深入解析了Spring AOP代理的触发机制和执行流程,从源码角度详细讲解了Bean如何被AOP代理,包括代理对象的创建、配置与执行逻辑,帮助读者全面掌握Spring AOP的核心技术。
30 3
Spring高手之路23——AOP触发机制与代理逻辑的执行
|
8天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
21 1
|
11天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
47 2
|
11天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
27 1
|
2天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
9 0
|
4天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
9 0
|
5天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
8 0
下一篇
无影云桌面