使用註解配置AOP
使用註解基於AspectJ
首先Spring怎麼使用註解?Sprinng不會自動尋找註解,必須告訴哪個類包下面有註解。
註解,就是代替配置檔案。
如同--配置了demo類,配置了通知類,切點,切點和通知之間的關係applicationcontext.xml配置檔案
Spring他用到的名稱空間context官方配置文件
<context:component-scan base-package=""></context:component-scan>
進入翻譯頁面
譯文:component-scan
掃描將自動註冊為Spring bean的帶註釋元件的類路徑。透過預設情況下,spring提供的@Component, @Repository, @Service, @Controller,將檢測到@RestController、@ControllerAdvice和@Configuration構造型。注意:這個標籤暗示了‘註釋-配置’標籤的效果,啟用@Required, @Autowired,@PostConstruct, @PreDestroy, @Resource, @PersistenceContext和@PersistenceUnit元件類中的註釋,這通常是自動檢測元件所需要的(沒有外部配置)。
指明註解在那個包下,多個包那貓就用逗號隔開!demo使用註解測試Spring是否檢測到註解物件結果:(被Spring管理的物件)[demo,
org.springframework.context.annotation.internalConfigurationAnnotationProcessor,
org.springframework.context.annotation.internalAutowiredAnnotationProcessor,
org.springframework.context.annotation.internalRequiredAnnotationProcessor,
org.springframework.context.annotation.internalCommonAnnotationProcessor,
org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,
org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationP
rocessor]
demo1張三 :12
demo1張三(輸入一個引數
發現:Demo首字母被小寫,這是預設情況下類名首字母小寫管理物件,也可以自定義:結果:後面的報錯是有因為test程式碼獲取的是Spring不存在的demo物件,Spring管理的是demo$123
結論:透過第一個註解省去了手動配置獲取切點程式
@Component 相當於</bean>
如果沒有引數。把類名首字母小寫,相當於</bean id=""/>
@Component(“自定義名”)
advice的配置檔案Spring指明瞭所在包註解同意昂是component上面註解解放了配置
後面該配置aop
配置切點:官方文件:必須定義切點
@Pointcut("execution(* transfer(..))")// the pointcut expressionprivate void anyOldTransfer() {}// the pointcut signature
註解配置前置通知:並註明該類是通知切面類:相當於<aop:aspect ref="myadvice">測試:text並沒有出現前置(配置還缺少)
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
譯文:屬性:proxy-target-class要建立基於類(CGLIB)的代理嗎?預設情況下,基於標準Java介面建立代理。資料型別:布林型預設值:false列舉值:——真正的——錯誤
true:使用cglib動態代理
false:使用jdk動態代理
-->
註解一般基於cjlib
結果報錯:咋又報錯了呢?煩啊?說是繫結不了切點呃呃呃呃??
demo這個類Spring沒有找到,把自定義改了默
結果,BUG還是有
去掉輸入值
結果:BUG還在
重新寫註解
結果:還是這個BUG-------真要氣瘋
那咋個辦,熬夜?????????????
上網查沒結果,步驟也都說是這樣沒錯啊
反正搞了那麼久就BUG突然消失,真是無語了,可能電腦慢Spring程式碼可能缺少沒下載全
真雞兒蛋疼??不知道什麼原因BUG悄悄的幹活。。。。。
沒BUG的時候的樣子:結果真是無語那麼什麼是cjlib註解以後寫
同理:後置,環繞,異常結果:一般有環繞就不需要寫前置後置
總結:1.在Spring配置檔案中設定註解在哪些包中
2.在demo類中新增@componet, 在方法上新增@pointcut("")定義切點
3.在通知類中配置
@component:表示類唄Spring管理
@Aspect相當於<aop:aspect>切點通知方法在當前類中