學習spring aop 時,做了個小demo,結果卻出了點小問題:
去了 segmentfault 問了一下:
問題剛發布完,我突然就意識到了什麼,於是乎,改了**如下:
實現類 performanceimpl 改為
/**
*@author itguang
*@create 2017-11-07 8:26
**/@component
public
class
performanceimpl
implements
performance
}
只是加了個@component註解,表示這是乙個bean.
aop配置類改為
@configuration
@enableaspectjautoproxy
public
class
aopconfig
}
接下類就是測試類啦:
@runwith(springrunner.class)
@springboottest
public
class
//bean 的名字預設是方法名,在 @autowried注入的時候 名字不同呼叫的方法裝配的bean也不同
@autowired
private performance performance;
@test
public
void
contextloads()
}
這時候 performance名稱可以隨便取(但預設bean名稱是類名稱),因為此時我們只有乙個performance的例項.
@autowired
private performance performance;
執行測試結果:
silence cell phone
taking seats
表演單口相聲...
pa pa pa
接下來修改**如下:
新增乙個實現類:performanceimpl2
@component
public
class
performanceimpl2
implements
performance
}
這時候spring已經管理了兩個 performance例項,因此測試類應該這樣寫
@runwith(springrunner.class)
@springboottest
public
class
@autowired
private performance performanceimpl;//@component對應的類名稱
@autowired
private performance performanceimpl2;//@component對應的類名稱
@test
public
void
contextloads()
@test
public
void
test2()
}
如果我們去掉實現類上的 @component,在配置類中使用 @bean注入,如:
@configuration
@enableaspectjautoproxy
public
class
aopconfig
//bean 的名字預設是方法名,在 @autowried注入的時候 名字不同呼叫的方法裝配的bean也不同
@bean
public performanceimpl performance()
//bean 的名字預設是方法名,在 @autowried注入的時候 名字不同呼叫的方法裝配的bean也不同
@bean
public performanceimpl2 performanceimpl2()
}
測試類中使用@autowried注入的bean名稱要和配置類中產生bean的方法名稱一致哦:
@runwith(springrunner.class)
@springboottest
public
class
@autowired
private performance performance;
@autowired
private performance performanceimpl2;
@test
public
void
contextloads()
@test
public
void
test2()
}
Spring AOP 中 Pointcut的用法
1.格式 execution modifiers pattern?ret type pattern declaring type pattern?name pattern param pattern throws pattern?括號中各個pattern分別表示 修飾符匹配 modifier pat...
Spring AOP中的幾個概念
aop,即面向切面程式設計,是對oop的一種補充和完善,在oop中由於有大量 的重複導致不利於各個模組的重用,而aop技術利用一種稱為 橫切 的技術,剖解開封裝的物件內部,並將那些影響了多個類的公共行為封裝到乙個可重用模組,並將其命名為 aspect 即切面。所謂 切面 簡單說就是那些與業務無關,卻...
spring aop 同乙個bean中方法呼叫方法
component public class testbean transactional public void b a方法中呼叫b方法,b方法的事務是否生效!不生效 原因是spring會為testbean生成乙個 物件 testbeanproxy,只用呼叫testbeanproxy b 切面才會...