Spring的通知和切入表达式的写法

1 Spring的通知类型 

1.1前置通知:在目标方法执行之前进行操作(aop:before)

  • 前置通知:获得切入点信息

1.2后置通知:在目标方法执行之后进行操作(aop:after-returning)

  • 配置(返回后的参数要与WRITELOG的参数名相同)
<aop:config>
	    <!-- 表达式配置哪些类型的方法需要增强 -->	    
	    <aop:pointcut expression="execution(* com.itykd.dao.impl.UserDaoImpl.delete(..))" id="pointCut2" returning="result"/>	    
	    <!-- 配置切面 -->
	    <aop:aspect ref="myAspect">	    
	        <aop:after-returning method="writeLog" pointcut-ref="pointCut2"/>	    
	    </aop:aspect>	
</aop:config>
  • WRITELOG方法需要提供一个Ojbect类型的参数,并且名字与配置文件中的恢复中的相同 
	public void writeLog(Object result) {
		System.out.println("写日志...."+result);
	}
  •  删除方法(这时WRITELOG中的结果参数将变成“永康达”)
	public String delete() {
		System.out.println("UserDaoImpl的delete方法执行了.....");
		return "ykd";
		
	}

1.3环绕通知:在目标方法执行之前和之后进行操作(aop:around)

  • 通知环绕可以阻止目标方法的执行
  • MyAspectXML类中添加的环绕方法:(1)返回类型必须是对象 ;(2)joinPoint.proceed()方法相当于执行目标程序 ;
  • 配置
<aop:config>
	    <!-- 表达式配置哪些类型的方法需要增强 -->    
	    <aop:pointcut expression="execution(* com.itykd.dao.impl.UserDaoImpl.update(..))" id="pointcut3" />	    
	    <!-- 配置切面 -->
	    <aop:aspect ref="myAspect">
	        <aop:around method="surround" pointcut-ref="pointcut3"/>	    
	    </aop:aspect>	
	</aop:config>
  •  围绕方法(返回类型必须是对象)
	public Object surround(ProceedingJoinPoint joinPoint) throws Throwable {
		System.out.println("环绕前通知........");
		Object obj = joinPoint.proceed();
		System.out.println("环绕后通知........");
		return obj;
	}

1.4异常抛出通知:在程序出现异常的时候进行的操作,比如事务的操作(aop:after-throwing)

  •  配置
	<aop:config>
	    <!-- 表达式配置哪些类型的方法需要增强 -->  
	    <aop:pointcut expression="execution(* com.itykd.dao.impl.UserDaoImpl.find(..))" id="pointcut4" />	    
	    <!-- 配置切面 -->
	    <aop:aspect ref="myAspect">    
	        <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut4" throwing="ex"/>	    
	    </aop:aspect>	
  •  afterThrowinig方法,必须要有一个的Throwable的参数,上述配置文件中投掷=“EX”要与Throwable的的参数前要相同
	public void afterThrowing(Throwable ex) {
		System.out.println("异常抛出通知....."+ex);
	}

1.5最终通知:无论代码是否有异常,总会执行,这就类似于finally块(aop:after)

	<aop:config>
	    <!-- 表达式配置哪些类型的方法需要增强 -->  
	    <aop:pointcut expression="execution(* com.itykd.dao.impl.UserDaoImpl.find(..))" id="pointcut5" />	    
	    <!-- 配置切面 -->
	    <aop:aspect ref="myAspect">    
	        <aop:after method="finalMethod" pointcut-ref="pointcut5" />	    
	    </aop:aspect>	

1.6 引介通知 

2  Spring切入点表达式写法

  • 基于execution的函数完成的
  • 语法
  1. [访问修饰符] 方法返回值 包名.类名.方法名(参数) []代表的是可选,注意有的之间是有空格的,是不能省略的:public void com.itykd.spring.CustomerDao.save(..)
  2. * *.*.*.*Dao.save(..) *代表的是通配符,但是方法参数中通配符使用..,而不是*
  3. * com.itykd.spring.CustomerDao+.save(..) “+”代表的是CustomerDao以及它的子类
  4. * com.itykd.spring..*.*(..) “..”代表的是spring以及它的子包
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
全新升级的Spring课程系列,2024年与您相伴成长!!!一、引言我们荣幸地宣布,将于2024年推出全新的Spring课程系列,旨在帮助初学者到进阶者一步步掌握Spring框架,并熟练应用于实际开发。随着课程的进行,我们将逐步上传课件,为您提供丰富的学习资源,敬请持续关注。二、课程概览本课程是Spring全家桶课程的初识篇,课程将带您快速掌握Spring的核心知识点——AOP(面向切面编程)与IOC(控制反转),为您后续的学习打下坚实的基础。注意:该课程与【Spring框架解析】课程有所重叠,请不要重复购买哦!三、课程内容我们深知Spring Framework的核心原理对于学习和应用的重要性,因此本课程将聚焦于这些原理的实际应用。通过案例分析、项目实操等方式,让您在掌握核心知识点的同时,也能将其灵活应用于日常工作。无论是面试准备还是项目开发,本课程都能为您提供有力的支持。四、Spring全家桶系列课程Spring全家桶生态圈汇聚了Spring框架及其众多相关组件、项目和模块,构成了一个强大的企业级Java应用程序开发、部署和管理解决方案。我们的Spring全家桶课程系列将涵盖这一生态圈的方方面面,从基础到进阶,让您全面掌握Spring的开发技巧和实践经验。本课程系列将聚焦于实操,让您通过实际操作加深对Spring框架的理解。如果您对Spring的原理等理论知识有浓厚兴趣,我们同时推荐您关注我们的【Spring框架解析】课程,以满足您更深入的学习需求。我们期待您的加入,共同在Spring的学习之路上成长和进步!Spring全家桶系列课程组成:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值