Spring AOP编程 【学习笔记 代码篇】

续 Spring AOP编程 【学习笔记 理论篇】https://blog.csdn.net/kedongyu_/article/details/81387140

AOP编程模式

    1.旧版本的Spring AOP编程模式:

编写Advice类必须实现指定的接口。

当程序执行指定方法前切入:实现Advice接口:MethodBeforeAdvice

当程序执行指定方法后切入:实现Advice接口:AfterReturningAdvice

当指定方法(程序)发生异常抛出后切入:实现Advice接口:ThrowsAdvice

在指定方法前后切入:实现环绕Advice接口:MethodInterceptor

 

    2.新版的Spring AOP 模式

使用POJO(Plain Old Java Object)类即可作为切面类,即不需继承任何类(Object除外)也不实现任何接口就可以作为切面类。

新版的Spring AOP编程

    1.查看pom.xml是否导入相关的类库spring-aspects,添加以下代码进行导入:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>5.0.7.RELEASE</version>
</dependency>

 

    2.编写一个POJO class,这里命名为:ServiceMethodAdvice.class

    3.在类级别增加注解类@Aspect

    4.在Spring的IoC配置文件中启用AspectJ的注解。

<aop:aspectj-autoproxy/>

    5.添加@Component注解,让Spring对切面类进行管理,这里Spring使用自动扫描注入。

Spring只支持方法的运行:方法前,方法后,方法前后,抛出异常后

Types of advice(切面代码的类型):

方法前Advice:使用@Before注解切面(也就是一个切面类里面的函数),表示该切面在指定方法(切入点)前切入。

方法后Advice:使用@After注解切面,表示该切面在指定方法(切入点)前切入。

异常抛出后Advice:使用@AfterThrowing注解切面,表示当指定方法抛出异常后切入。

环绕Advice:使用@Around注解切面,表示在指定方法前后切入

例子:

@Before的使用:

	@Before("execution(* com.neusoft.first.service.impl.*.*(..))")
	public void runBeforeMethod(JoinPoint jp) throws Exception{
		System.out.println("业务层方法前Advice...");
	}

其中"execution(* com.neusoft.first.service.impl.*.*(..))"指定其接入点,也就是包com.neusoft.first.service.impl下任何方法体,不限返回值,不限参数,都进行拦截切入。

@After的使用:

        @After("execution(* com.neusoft.first.service.impl.*.*(..))")
	public void runAfterMethod(JoinPoint jp) throws Exception{
		System.out.println("业务层方法后Advice...");
	}

@Around的使用

	@Around("execution(* com.neusoft.first.service.impl.*.*(..))")
	public Object runAroundMethod(ProceedingJoinPoint pjp) throws Throwable{
		System.out.println("业务层方法前");
		//...程序...
		Object obj=pjp.proceed();//执行业务层程序,可固定不变。
		//...程序...
		System.out.println("业务层方法后");
		return obj;
	}

@AfterThrowing的使用

	@AfterThrowing(value="execution(* com.neusoft.first.service.impl.*.*(..))",throwing="exception")
	public void serviceExceptionHandler(JoinPoint jp,Exception exception) throws Exception {
		System.out.println("发生异常");
	}

运行程序:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值