-
SpringAOP 不是為了提供最完整的AOP實(shí)現(xiàn),而是側(cè)重提供一種AOP實(shí)現(xiàn)和Spring IoC容器的整合,幫助解決企業(yè)中的問(wèn)題,他是純 java 實(shí)現(xiàn)的,目前只支持方法執(zhí)行連接點(diǎn)(通知Spring Bean的方法執(zhí)行)
查看全部 -
AOP 的實(shí)現(xiàn)方式
- 預(yù)編譯,比如 AspectJ
- 運(yùn)行期動(dòng)態(tài)代理(JDK動(dòng)態(tài)代理,CGLib動(dòng)態(tài)代理),比如SpringAOP,JbossAOP
查看全部 -
Bean的作用域包括 singleton,prototype,request,session,global session
查看全部 -
這節(jié)講的是通過(guò)配置文件初始化 bean 對(duì)象。要用到 @configuration ,@importResource 以及 @value。@importResource 注解中指明 xml配置文件的路徑。另外在 xml 配置文件中配置 location 指明配置文件的路徑。
查看全部 -
關(guān)于 @bean 和 @component 注解的區(qū)別的理解:
@component 直接在類上注解,相當(dāng)于拿到了整個(gè) xml ,可以直接使用
@bean 更多的是用來(lái)對(duì)具體的某個(gè)類進(jìn)行配置,他結(jié)合 @configuration 使用。例如本例中實(shí)際是在配置 storeString 這個(gè)類,為此專門(mén)寫(xiě)了一個(gè)配置類,用?@configuration 對(duì)配置類進(jìn)行注解,再用 @bean 對(duì)具體的類進(jìn)行注解,將要配置的類?storeString 注解成一個(gè) bean 對(duì)象,在注解中設(shè)置其bean 的 id 以及初始化,銷毀的方法對(duì)這個(gè)類進(jìn)行配置。
查看全部 -
使用 @bean 注解的時(shí)候如果沒(méi)有指定 bean 的 id 那么默認(rèn)的 id 就是 方法的名稱
@bean 中可以傳入 name、init-method、destroy-method等參數(shù),name 指定了 bean 的 id。初始化和銷毀的方法在 storeString 類中實(shí)現(xiàn)。
查看全部 -
有時(shí)候類型是接口的成員變量可能有多個(gè)實(shí)現(xiàn)類,@qualifier 就是用來(lái)縮小范圍的,指定使用那個(gè)接口的實(shí)現(xiàn)類來(lái)賦給當(dāng)前的成員變量
@qualifier 也可以用在參數(shù)中,跟上面一樣,只是這時(shí)候的參數(shù)是接口,他也可能是有多個(gè)實(shí)現(xiàn)類,用這個(gè)注解指明要使用的是哪個(gè)實(shí)現(xiàn)類
查看全部 -
注解為 Map 類型的 bean 其 Key 的類型是 String
查看全部 -
IOC 容器和 bean 的管理有兩種實(shí)現(xiàn)方式:基于 xml 配置和基于java注解的方式(從Sping3.0開(kāi)始)
注解中沒(méi)有指定 bean 的 id 默認(rèn)使用 類名但是首字母小寫(xiě)
查看全部 -
所有的 applicationContext 都實(shí)現(xiàn)了 resource 接口
如果什么都不寫(xiě),就和 applicationContext 創(chuàng)建方式一樣,例如 classpath: test.txt
查看全部 -
實(shí)現(xiàn)接口的初始化和銷毀先于在配置文件中配置的初始化和銷毀方法,他們都會(huì)覆蓋掉全局配置的這些方法,全局的配置的方法不執(zhí)行。配置了全局的初始化和銷毀方法,即使沒(méi)有實(shí)現(xiàn)這些方法,也不會(huì)報(bào)錯(cuò)。另外兩種方法配置了就必須實(shí)現(xiàn),否則會(huì)報(bào)錯(cuò)
查看全部 -
通過(guò) new ClassPathXmlApplicationContext() 出來(lái)的一個(gè) context (上下文)就是一個(gè)容器,每次 new 都創(chuàng)建新的容器
查看全部 -
關(guān)于設(shè)值方法的注入,我覺(jué)得應(yīng)該是這樣的:在 ServiceImpl 中要使用 DAO 的 save 方法,更具體應(yīng)該是要用 DAOIml 對(duì)象的 save 方法,以前都是通過(guò) new DAOIml 然后用 DAO 接口的引用去指向他,然后調(diào)用 save 方法,這樣才能執(zhí)行 DAOImpl 對(duì)象中的方法啊。視頻里面感覺(jué)比較陌生的是,在 serviceImlp 中直接聲明了 DAO 這個(gè)接口,然后在 set 方法中傳入了 DAO 類型的參數(shù)賦給了他,而不是傳入了 DAOImpl 類型的參數(shù),這個(gè)編程都只有接口,很突然這么寫(xiě)很突兀。再結(jié)合 bean的配置文件,大概明白了這樣寫(xiě)的好處。
配置文件中的邏輯很好理解,就是 A 通過(guò) ref 也就是參考的對(duì)象B給自己賦值,而這個(gè)參考的對(duì)象B通過(guò) id 就保證了是唯一確定的。關(guān)鍵就在于這個(gè)B的類型是DAOIpml 類型的,也就是他是接口的實(shí)現(xiàn)類。好!這樣就明白了,IOC 中所有的對(duì)象都是 bean,也就是 id 為 B 的 bean其實(shí)是 DAO 的實(shí)現(xiàn)類的實(shí)例對(duì)象,可以認(rèn)為他就是傳遞給 set 方法的實(shí)參,而形參寫(xiě)成接口的好處就體現(xiàn)為:一個(gè)實(shí)現(xiàn)了接口的類也是接口的類型。這樣,形參不是某個(gè)具體實(shí)現(xiàn)類的類型,我們就可以大膽地在 bean 配置中使用各種這個(gè)接口的實(shí)現(xiàn)類。
這樣給我們?cè)陬愔匈x值的啟發(fā)就是,把變量設(shè)為接口類型,只關(guān)注變量的類型而不關(guān)注變量的具體值。
bean 的按值注入的過(guò)程是怎樣的呢?可以這樣想,配置文件中A類bean 就是對(duì)應(yīng)了類中的要被賦值的成員變量,B類bean這時(shí)自然就是傳遞進(jìn)去的和形參對(duì)應(yīng)的實(shí)參,仍然是通過(guò)實(shí)參值傳遞給形參從而給成員變量賦值。
在 test 中調(diào)用的時(shí)候,通過(guò)父類的 getBean 方法("beanId") 通過(guò)唯一的 id 就得到了這個(gè) bean 的 class 對(duì)應(yīng)的實(shí)例對(duì)象,bean 的 name 就是這個(gè)類的成員變量。可以看到,這個(gè) bean 對(duì)應(yīng)的類是 service 接口的實(shí)現(xiàn)類,于是調(diào)用 save 方法就是實(shí)現(xiàn)類中的方法啦~
構(gòu)造注入也是同理,只是實(shí)現(xiàn)類中要有構(gòu)造方法。有一點(diǎn)值得注意的是,constructor-arg 標(biāo)簽可以看出來(lái)它代表的是參數(shù),因此,后面的 name 表示的是參數(shù)名,這個(gè)參數(shù)名要和構(gòu)造器中的參數(shù)名保持一致,后面的 ref 表示了要給這個(gè)參數(shù)傳入的值。proprietary 是屬性的意思,后面的 name 表示屬性名。
查看全部 -
@PostConstruct 和@PreDestroy 注解 可以聲明bean初始化和摧毀時(shí)發(fā)生的函數(shù)。
@name 幫助我們標(biāo)記? 在IOC容器中具有相同類型的的類的bean,定位到我們想要的bean的name(也就是那個(gè)bean的id)
查看全部 -
使用@Configuration一般都是配置類,即對(duì)某個(gè)類的具體參數(shù)進(jìn)行配置和初始化。
查看全部
舉報(bào)