javascript
Spring框架基于AspectJ的AOP开发规范和步骤
AOP和動態(tài)代理的關(guān)系:
AOP術(shù)語:
需要新增的到業(yè)務(wù)代碼中的功能(在目標(biāo)對象那里叫橫切關(guān)注點,在切面類中叫通知)
封裝了增強方法(橫向關(guān)注點)的類
切面類中的每一個增強的方法叫做通知,通知通過切入點表達(dá)式作用于連接點上
所抽取出來的代碼要作用的對象
切面要作用到目標(biāo)對象的具體位置,只能是四個位置,方法執(zhí)行前,方法執(zhí)行后,異常捕獲后,finilly后.
AOP的切面類通過切入點找到對應(yīng)的連接點
大白話就是把所有需要增強的方法放在一個類里,該類就是切面類.切面類包含了通知,通知就是需要增強的方法,aop通過切入點表達(dá)式讓通知作用于指定目標(biāo)方法的連接點上,可能是方法之前連接點,方法之后連接點.
一個切面中應(yīng)該包含@Aspect,通知,切入點表達(dá)式,才能夠作用在連接點上
切入點表達(dá)式的寫法:
//第一個 * 代表權(quán)限修飾符,返回值
//第二個 * 代表該包下的所有的類
//第三個 * 代表該包下的所有的類的所有方法
//…代表任意的參數(shù)列表
//切入到com.sms.spring.aop包下的所有類的所有方法的前面
spring在解析這個切入點表達(dá)式之后,執(zhí)行前置|后置|返回通知時,會將方法的信息封裝在JointPoint這個類中:
public void before(JoinPoint joinpoint) {//joinPoint.getArgs():獲取方法的參數(shù)Object[] args = joinpoint.getArgs();String methodName = joinpoint.getSignature().getName();}公共切入點寫法:@Pointcut
@Pointcut(value="execution(* com.sms.spring.aop.*.*(..))")public void test(){}公共切入點的使用:
@Before(value="test()")定義切面作用的優(yōu)先級:@Order(數(shù)字),值越小優(yōu)先級越高
開發(fā)步驟:
①導(dǎo)入jar包,或者直接使用maven導(dǎo)入
需要spring的四個核心jar(core,bean,context,expression)+aopalliance+spring-aop+cglib+spring-aspects+aspectjweaver
②創(chuàng)建spring核心xml文件,并引入aop和context的命名空間
③打開spring的組件掃描和AspectJ動態(tài)代理
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" 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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 開啟組件掃描 --><context:component-scan base-package="com.sms.spring.aop"></context:component-scan><!-- 開啟Asceptj的動態(tài)代理功能 --><aop:aspectj-autoproxy /> </beans>④把目標(biāo)類交給spring管理
給目標(biāo)類添加@Component注解
⑤把包含增強方法的切面類交給Spring管理并標(biāo)識 這是個切面類
給切面類添加@Component注解和@Aspect注解
⑥在切面類中寫增強方法,并給方法加上前置|后置|返回|異常 通知,編寫切入點表達(dá)式,將該通知(增強方法)作用到連接點
@Before(value = "execution(* com.sms.spring.aop.*.*(..)")public void before(JoinPoint joinpoint) {//joinPoint.getArgs():獲取方法的參數(shù) }⑦使用Spring創(chuàng)建代理對象
其中必須得到接口對象,而非實現(xiàn)類對象,因為代理對象和實現(xiàn)類對象實現(xiàn)共同的接口.
ApplicationContext ac= new ClassPathXmlApplicationContext("aop.xml"); MathI mathI = context.getBean("mathImpl", MathI.class);⑧使用該代理對象調(diào)用方法:方法被增強
ApplicationContext ac= new ClassPathXmlApplicationContext("aop.xml"); MathI mathI = context.getBean("mathImpl", MathI.class); mathI.method(); 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Spring框架基于AspectJ的AOP开发规范和步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse旧版本Luna SR2(版
- 下一篇: Spring框架关于事务处理的API和使