java JSP開(kāi)發(fā)之Spring中Bean的使用
java JSP開(kāi)發(fā)之Spring中Bean的使用
在傳統(tǒng)的Java應(yīng)用中,bean的生命周期很簡(jiǎn)單。使用Java關(guān)鍵字new進(jìn)行bean實(shí)例化,然后bean就可以被使用了,一旦該bean不再使用,Java就自動(dòng)進(jìn)行垃圾回收。然而,在Spring中,bean的生命周期就比較復(fù)雜了。下面是一個(gè)bean裝載到Spring應(yīng)用上下文的過(guò)程:
如圖所示:在你準(zhǔn)備調(diào)用bean之前,bean工廠執(zhí)行了若干啟動(dòng)步驟:
1.Spring對(duì)bean進(jìn)行實(shí)例化;
2.Spring將值和bean的引用注入到bean對(duì)應(yīng)的屬性中;
3.如果bean實(shí)現(xiàn)了BeanNameAware接口,Spring將bean的ID傳遞給setBean-Name()方法;
4.如果bean實(shí)現(xiàn)了BeanFactoryAware接口,Spring將調(diào)用setBeanFactory()方法,將BeanFactory容器實(shí)例傳入;
5.如果bean實(shí)現(xiàn)了ApplicationContextAware接口,Spring將調(diào)用setApplicationContext()方法,將bean所在的應(yīng)用上下文的引用傳入進(jìn)來(lái);
6.如果bean實(shí)現(xiàn)了BeanPostProcessor接口,Spring將調(diào)用它們的post-ProcessBeforeInitialization()方法;
7.如果bean實(shí)現(xiàn)了InitializingBean接口,Spring將調(diào)用它們的after-PropertiesSet()方法。類似地,如果bean使用initmethod聲明了初始化方法,該方法也會(huì)被調(diào)用;
8.如果bean實(shí)現(xiàn)了BeanPostProcessor接口,Spring將調(diào)用它們的post-ProcessAfterInitialization()方法;
9.此時(shí),bean已經(jīng)準(zhǔn)備就緒,可以被應(yīng)用程序使用了,它們將一直駐留在應(yīng)用上下文中,直到該應(yīng)用上下文被銷毀;
10.如果bean實(shí)現(xiàn)了DisposableBean接口,Spring將調(diào)用它的destroy()接口方法。同樣,如果bean使用destroy-method聲明了銷毀方法,該方法也會(huì)被調(diào)用。
一,創(chuàng)建可以被發(fā)現(xiàn)的Bean
在廚師的眼中,一套好的刀是必不可少的,它能夠?qū)⑵降氖澄锼夭募庸こ删碌乃囆g(shù)品。
package cooking; public interface knife{ void cut(); }
現(xiàn)在,我們創(chuàng)建一個(gè)名為knife(刀)的接口,它擁有cut(切)的功能。接下來(lái)我們實(shí)現(xiàn)這個(gè)接口
package cooking @Component public class beef implements knife{ private int weight = 2; private double price = 32.1; public void cut(){ System.out.println(“This is perfect beef”,+“weight:”+weight +“kg”+“,”+“It's price is”+price+"$"); } }
請(qǐng)注意,我們?cè)赽eef類上使用了@Component注解。這個(gè)簡(jiǎn)單的注解表明 該類是一個(gè)組件類,并告訴Spring要為這個(gè)類創(chuàng)建bean。
在默認(rèn)情況下,組件掃描是不啟用的,我們需要顯示配置一下Spring,命令Spring去尋找?guī)в蠤Component注解的類,并為其創(chuàng)建bean
package cooking @Configuration @ComponentScan public class knifeConfig{ }
注意到,在knifeConfig類上加上了@ComponentScan注解,該注解能夠在Spring中開(kāi)啟組件掃描,如果沒(méi)有其他配置的話,@ComponentScan默認(rèn)會(huì)掃描與配置類相同的包,去查找?guī)в蠤Component的注解類,并在Spring中自動(dòng)為其創(chuàng)建一個(gè)bean。如果你更傾向于使用XML來(lái)啟用組件掃描的話,那么可以使用Spring context命名空間的<context:component-scan>元素。
<context:component-scan base-package="cooking"/> 該標(biāo)簽會(huì)開(kāi)啟組件掃描,去cooking包下尋找?guī)в蠤Component的注解類。
以上就是Spring中Bean的使用方法,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Java如何實(shí)現(xiàn)將類文件打包為jar包
這篇文章主要介紹了Java如何實(shí)現(xiàn)將類文件打包為jar包,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06使用@JsonFormat和@DateTimeFormat對(duì)Date格式化操作
這篇文章主要介紹了使用@JsonFormat和@DateTimeFormat對(duì)Date格式化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08java ThreadPoolExecutor線程池拒絕策略避坑
這篇文章主要為大家介紹了java ThreadPoolExecutor拒絕策略避坑踩坑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07解決java 查看JDK中底層源碼的實(shí)現(xiàn)方法
本篇文章是對(duì)在java中查看JDK中底層源碼的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05