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