-
@Aspect注解是不能夠通過類路徑自動檢測發(fā)現(xiàn)的 ,所以需要配合使用@Component注釋或者在xml配置bean
一個(gè)類中的@Aspect注解標(biāo)識它為一個(gè)切面,并且將自己從自動代理中排除
查看全部 -
aspect
@AspectJ切面使用@Aspect注解配置,擁有@Aspect的任何bean將被Spring自動識別并應(yīng)用
用@Aspect注解的類可以有方法和字段,他們也可能包括切入點(diǎn)(pointcut),通知(Advice)和引入(introduction)聲明
@Aspect注解是不能夠通過類路徑自動檢測發(fā)現(xiàn)的 ,所以需要配合使用@Component注釋或者在xml配置bean
查看全部 -
使用auto-proxy
Spring也允許使用 自動代理 的bean定義,它可以自動代理選定的bean,這是建立在Spring的bean postprocessor功能基礎(chǔ)上的(在加載bean的時(shí)候就可以修改)
BeanNameAutoProxyCreator
查看全部 -
使用ProxyFactory
使用Spring AOP而不必依賴于Spring IoC
大多數(shù)情況下最佳實(shí)踐是用IoC容器創(chuàng)建AOP代理
雖然可以硬編碼方式實(shí)現(xiàn),但是Spring推薦使用配置或注解方式實(shí)現(xiàn)
查看全部 -
父子bean的方式
查看全部 -
簡化的proxy定義3
查看全部 -
簡化的proxy定義2 <bean?id="txProxyTemplate"?abstract="true" class="org.springframework.transaction.interceptor.TrsansactionProxyFactoryBean"> ????<property?name="transactionManager"?ref="transactionManager"/> ????<property?name="transactionAttributes"> ????????<props> ????????????<prop?key="*">PROPAGATION_REQUIRED</prop> ????????</props> ????</property> </bean>
查看全部 -
簡化的proxy定義
使用父子bean定義,以及內(nèi)部bean定義,可能會帶來更清潔和更簡潔的代理定義(抽象屬性標(biāo)記父bean定義為抽象的這樣他不能被實(shí)例化)
查看全部 -
實(shí)現(xiàn)了MethodInterceptor攔截器的才能使用global advisors
查看全部 -
修改后的結(jié)果
查看全部 -
使用global advisors
用*做通配,匹配所有攔截器加入通知鏈
查看全部 -
Proxying classes
CGLIB的代理對用戶是透明的,需要注意:
-final方法不能被通知,因?yàn)樗麄儾荒鼙桓采w
-不用把CGLIB添加到classpath中, 在spring3.2中,cglib被重新包裝并包含在Spring核心的JAR(即基于cglib的AOP就像JDK動態(tài)代理一樣“開箱即用”)
我們不用手動的去引入cglib這個(gè)包了
查看全部 -
Proxying classes
前面的例子中如果沒有Person接口,這種情況下Spring會使用CGLIB代理,而不是JDK動態(tài)代理
如果想,可以強(qiáng)制在任何情況下使用CGLIB,即使有接口
CGLIB代理的工作原理是在運(yùn)行時(shí)生成目標(biāo)類的子類,SPring配置這個(gè)生成的子類委托方法調(diào)用到原來的目標(biāo)
子類是用來實(shí)現(xiàn)Decorator模式,織入通知
查看全部 -
修改后的結(jié)果是最常用的方式,好處就是不需要在外部定義bean
如果直接在外部定義bean,有個(gè)壞處,就是我們可以通過id 直接get到原始的bean對象(這個(gè)Bean對象是沒有經(jīng)過任何的代理處理過的,所以這些advice是不會被執(zhí)行的)
查看全部 -
選中的部分一定會走JDK代理
<property name="proxyInterfaces">
????<value> com.imooc.aop.api.BizLogic</value>
</property>
查看全部
舉報(bào)