更新時間:2024-04-17 19:08:11作者:佚名
一、是否使用@Bean注解的區(qū)別 1、問題發(fā)現(xiàn)
我一直有一個疑問。 我們都知道bean是什么意思,我們使用@Bean來教導(dǎo)對象或方法來管理。 但在實際使用過程中,我們發(fā)現(xiàn)如果單純調(diào)用一個對象的后一個方法,不需要使用@Bean注解就可以調(diào)用。 那么如何體現(xiàn)對對象的控制呢? 管理方面呢?
這里,在這個類中無論有沒有@Bean都可以正常使用。
2.問題分析
在上面的地方添加一個輸出
添加@Bean并刷新頁面幾次。 后臺結(jié)果如下:
可以看出,使用@Bean注解時,無論頁面刷新多少次(即方法執(zhí)行多少次),添加該注解的方法只在最開始(在該方法之前)執(zhí)行一次。頁面刷新),之后就不再執(zhí)行。
不添加@Bean,多次刷新頁面,后臺結(jié)果如下:
可以看到,在不使用@Bean注解的情況下,方法(())只會在頁面刷新時執(zhí)行(即執(zhí)行該方法),并且執(zhí)行次數(shù)是一樣的。
這樣一比較,結(jié)果就很明顯了。 @Bean注解的對象或者方法確實是被管理的,而且這樣效率更高,因為這里也可以清楚的看到bean是什么意思,他只創(chuàng)建了一個對象,但是卻可以使用無數(shù)次,不需要任何其他的管理。 該對象創(chuàng)建一次,使用一次; 通過查詢,管理的對象默認(rèn)是單例模式(即對象只創(chuàng)建一次,但可以多次使用),并且是風(fēng)格。 當(dāng)然,這只是有無注解的區(qū)別之一。
二、@Bean和@的對應(yīng)使用 1、問題發(fā)現(xiàn)
眾所周知,如果通過@Bean將對象交給管理,通過@實現(xiàn)自動裝配,那么如果是不同的方法,返回類型相同,顯然是不行的。
2.問題分析
讓我們看看問題是什么
什么意思?
無法自動組裝。 有多個 '' 類型的 bean
其實很容易理解。 你的兩個返回值是一樣的。 如何確定自動組裝的是哪種方法?
3.問題解決方案一,同名
這種情況下,會自動根據(jù)你的自動組裝對象的名稱和方法名稱是否一致來進(jìn)行判斷。 因此,這里只需要讓你的自動組裝方法名與托管方法名保持一致即可,如下:
方法2、@指定
使用@指定名稱,如下:
方法三、@Bean主鍵添加屬性
在@Bean()中填寫name屬性
方法四、使用不同的注解
例如,如果一個管理方法有多個注解,并且兩者之間的注解不同,那么在自動組裝時只需要編寫相應(yīng)的注解即可,如下:
當(dāng)然,這些注解并不是隨便添加的,而是根據(jù)需要添加的,所以嚴(yán)格來說,這并不能算是一種解決方案。
總而言之,我們使用官方的,是為了讓你的自動裝配對象名稱與方法對象(即方法一)保持一致。 這不是最方便的嗎?
三、如何運行不在啟動類所在包下的文件?
眾所周知,在一個項目中,默認(rèn)會執(zhí)行啟動類所在包下的文件。 那么不在包下怎么執(zhí)行呢?
方法一、使用@Bean注解
結(jié)果
方法二、@注解
當(dāng)將bean交給管理時,如果該bean不在啟動類的包或子包中英語作文,可以通過方法將該類導(dǎo)入到配置類中。
有人會說包掃描,但實際上這里最好不要使用包掃描。 涉及到最底層,大概就是默認(rèn)掃描的@n注解設(shè)置。 我是新手QAQ。
@掃描沒有指定,所以默認(rèn)掃描當(dāng)前啟動類所在的包。 既然沒有人指定包,我們最好不要指定它。
四、@Bean和@1.@Bean
官方解釋:只有當(dāng)指定的類實例對象在容器中不存在時,相應(yīng)的配置才會生效。
這意味著如果該對象已經(jīng)被管理,則將不再創(chuàng)建它。
運行結(jié)果:
可以看到還沒有執(zhí)行
如果沒有對應(yīng)的bean,則創(chuàng)建它
2.@
官方解釋:只有指定的類實例對象存在于容器中時,相應(yīng)的配置才會生效。
也就是說,只有該對象已經(jīng)存在時才會被創(chuàng)建。 例如,連接池只有當(dāng)連接池有數(shù)據(jù)對象時才會創(chuàng)建,否則不會創(chuàng)建。