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环绕前通知================删除商品...
环绕后通知================查询所有商品...
最终通知==================查询一个商品...
目录
相关文章
|
5天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
115 73
|
5天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
5天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
30天前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
59 5
|
1月前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
68 8
|
1月前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
44 4
|
1月前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
1月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
123 2
|
1月前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
55 2
|
1月前
|
XML 监控 安全
深入调查研究Spring AOP
【11月更文挑战第15天】
46 5