Spring AOP中bean的定義與裝配

2021-08-13 06:11:28 字數 2527 閱讀 9243

學習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 切面才會...