spring之aop

本文详细介绍了面向切面编程(AOP)的基本概念,包括切面、连接点、通知、切入点等专业术语,并通过实例展示了如何创建切面并将其动态地切入业务逻辑中,以提高代码的重用性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是AOP

AOP是面向切面的编程,其编程思想是把散布于不同业务但功能相同的代码从业务逻辑中抽取出来,封装成独立的功能模块,这此独立的模块被称为切面(Aspect),切面 的具体功能方法被称为关注点。在业务逻辑执行过程中,AOP会把分离出来 的切面 和关注点动态切入到业务流程中,这样做的好处是提高了功能代码的重用性和可维护性。

二、相关专业述语

  • Aspect
    表示切面。切入业务流程的一个独立的功能模块。
  • Joint point
    表示链接点。也就是业务流程在运行过程中需要插入切面的具体位置。
  • Advice
    表示通知。是切面的具体实现方法。可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)和环绕通知(Around)五种。实现方法具体属于哪 类通知,是在配置文件和注解中指定的。
  • Pointcut
    表示切入点。用于定义通知应该切入到哪些连接点上,不同的通知通常需要切入到不同的连接点上。
  • Target
    表示目标对象。被 一个或者多个切面所通知的对象。
  • Proxy
    表示代理对象。将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象为目标对象的业务逻辑功能加上被 切入的切面所形成的对象。
  • Weaving
    表示切入,也称为织入。将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期。

三、如何创建切面

切面其实就是业务逻辑模块中使用到的具有相同功能的程序的抽取出来形成的功能模块。如:把校长给老师发送课程邮件时需要对老师身份进行验证,我们就可以把这个验证的功能抽出来,形成切面。

四、如何把切面切入到业务逻辑中实现相应的功能

1.选择连接点,即在业务逻辑中选择一个位置作为切面的切入点。如:上述的发送邮件业务,可以把setTeacher方法之前定义为连接点。
2.编写配置文件xxx.xml。

<bean id="VerfyUserAspect" class="com.milihua.springprogram.aspect.VerifyUser" />
<aop:aspectj-autoproxy proxy-target-class="true" />
<aop:config>
	<aop:aspect id="verify" ref="VerifyUserAspect">
		<aop:pointcut id="verfyuser" expression="execution(* com.milihua.springprogram.notice.AopEmailNotice.setTeacher(..)) and args (teacher)" />
		<aop:before pointcut-ref="verfyuser" method="beforeAdivce" arg-names="teacher" />
	</aop:aspect>
</aop:config>

配置文件中需要引用AOP命名空间,否则会报错。
<aop:aspectj-autoproxy proxy-target-class=“true” />
这个用于设定代理切入类是基于接口还是基于类。如果proxy-target-class的值是true即为基于类创建的,否则是基于接口的。
切点表达式如下:
execution(* com.milihua.springprogram.notice.AopEmailNotice.setTeacher(…))
表示切入点为AopEmailNotice的setTeacher方法。其中号表示 切入 点为任意的返回类型,(…)表示 任意的参数。
再如:
execution(
com.milihua.springprogram.notice….(…))
表示切点为com.milihua.springprogram.notice包及子包下所有类及所有的方法。
又如:
execution(* com.milihua.springprogram.notice..(…))
表示切入点为com.milihua.springprogram.notice包下所有的类及类中所有方法。

五、需要使用到的jar包

  • spring-aop-xxx.RELEASE
  • spring-aspects-xxx.RELEASE
  • aspectjrt
  • aspectjweaver
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值