起因
偶然間,用到了@Configuration
創(chuàng)建Bean
,對(duì)于@Configuration
又學(xué)到了一些知識(shí)點(diǎn)剿牺。
單例模式
網(wǎng)上查資料,理解有誤差环壤,以為單例模式一個(gè)類(lèi)只有一個(gè)實(shí)例晒来,只能創(chuàng)建一個(gè)Bean;但是如果同一個(gè)類(lèi)需要?jiǎng)?chuàng)建多個(gè)對(duì)象的時(shí)候郑现,該怎么辦湃崩?
后來(lái)經(jīng)過(guò)大佬的點(diǎn)撥,再加上查找資料接箫,發(fā)現(xiàn):
在Spring中竹习,bean可以被定義為兩種模式:prototype(多例)和singleton(單例)。
singleton(單例):只有一個(gè)共享的實(shí)例存在列牺,所有對(duì)這個(gè)bean的請(qǐng)求都會(huì)返回這個(gè)唯一的實(shí)例整陌。
prototype(多例):對(duì)這個(gè)bean的每次請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的bean實(shí)例,類(lèi)似于new瞎领。
Spring bean 默認(rèn)是單例模式泌辫。
Spring下默認(rèn)的bean均為singleton,可以通過(guò)singleton=“true|false” 或者 scope="?"來(lái)指定九默。
@Configuration
public class MyConfig
{
@Bean
public UserDao createUserDao ()
{
return new UserDao();
}
@Bean
public UserDao createUserDao2 ()
{
return new UserDao();
}
@Service
public class UserService
{
@Autowired
@Qualifier(value = "createUserDao2") //使用Qualifier指定bean對(duì)象
private UserDao userDao;
@Autowired
@Qualifier(value = "createUserDao") //使用Qualifier指定bean對(duì)象
private UserDao userDao;
}
既然講到了單例模式震放,我們來(lái)看一下。
單例模式涉及到一個(gè)單一的類(lèi)驼修,該類(lèi)負(fù)責(zé)創(chuàng)建自己的對(duì)象殿遂,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建。這個(gè)類(lèi)提供了一種訪(fǎng)問(wèn)其唯一的對(duì)象的方式乙各,可以直接訪(fǎng)問(wèn)墨礁,不需要實(shí)例化該類(lèi)的對(duì)象。
import注解用法
不知道大家有沒(méi)有碰到過(guò)這種情況耳峦,我在一個(gè)工具包里面使用@Configuration
寫(xiě)好了一個(gè)config類(lèi)恩静,但是我在項(xiàng)目里面如何使用這個(gè)類(lèi)呢?這個(gè)時(shí)候我知道了@Import
蹲坷,通過(guò)快速導(dǎo)入的方式實(shí)現(xiàn)把實(shí)例加入spring的IOC容器中驶乾,加入IOC容器的方式有很多種,@Import
注解就相對(duì)很牛皮了循签,可以用于導(dǎo)入第三方包 级乐,當(dāng)然@Bean
注解也可以,但是@Import
注解快速導(dǎo)入的方式更加便捷县匠。
使用方法:
@Import({ 類(lèi)名.class , 類(lèi)名.class... })
@Configuration
public class TestDemo {
}
這樣一來(lái)风科,對(duì)應(yīng)的類(lèi)的bean
都將加入到spring
容器中罕扎,這些在容器中bean
名稱(chēng)是該類(lèi)的全類(lèi)名 ,比如com.zd.類(lèi)名丐重。