Spring的FactoryBean<Object>接口示例代碼
FactoryBean接口
FactoryBean是Spring框架中的一個(gè)接口,用于創(chuàng)建和管理Bean對(duì)象。它的作用是將Bean的創(chuàng)建過(guò)程交給FactoryBean實(shí)現(xiàn)類來(lái)完成,而不是直接由Spring容器來(lái)創(chuàng)建。
實(shí)現(xiàn)FactoryBean接口的類必須實(shí)現(xiàn)getObject()方法,該方法返回的是實(shí)際的Bean對(duì)象。另外,還可以實(shí)現(xiàn)getObjectType()方法,該方法返回的是實(shí)際的Bean類型。
下面是一個(gè)完整的示例代碼:
MyBean.java
public class MyBean {
private String name;
public MyBean(String name) {
this.name = name;
}
public String getName() {
return name;
}
}MyBeanFactory.java
public class MyBeanFactory implements FactoryBean<MyBean> {
private String name;
public MyBeanFactory(String name) {
this.name = name;
}
@Override
public MyBean getObject() throws Exception {
return new MyBean(name);
}
@Override
public Class<?> getObjectType() {
return MyBean.class;
}
@Override
public boolean isSingleton() {
return true;
}
}Main.java
@SpringBootApplication
public class Main implements CommandLineRunner {
@Autowired
private ApplicationContext context;
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
@Override
public void run(String... args) throws Exception {
MyBean myBean1 = (MyBean) context.getBean("myBean1");
MyBean myBean2 = (MyBean) context.getBean("myBean2");
System.out.println(myBean1.getName()); // 輸出:myBean1
System.out.println(myBean2.getName()); // 輸出:myBean2
}
@Bean
public MyBeanFactory myBean1() {
return new MyBeanFactory("myBean1");
}
@Bean
public MyBeanFactory myBean2() {
return new MyBeanFactory("myBean2");
}
}在這個(gè)示例中,我們定義了一個(gè)MyBean類,它有一個(gè)name屬性。然后我們定義了一個(gè)MyBeanFactory類,它實(shí)現(xiàn)了FactoryBean接口,并在getObject()方法中返回了一個(gè)MyBean對(duì)象。在Main類中,我們通過(guò)@Bean注解定義了兩個(gè)MyBeanFactory對(duì)象,并通過(guò)ApplicationContext獲取了這兩個(gè)對(duì)象的實(shí)例,最后輸出了它們的name屬性。
注意,我們?cè)贛yBeanFactory類中實(shí)現(xiàn)了isSingleton()方法并返回了true,表示該FactoryBean創(chuàng)建的Bean對(duì)象是單例的。如果返回false,則表示該FactoryBean創(chuàng)建的Bean對(duì)象是非單例的。
到此這篇關(guān)于Spring的FactoryBean<Object>接口的文章就介紹到這了,更多相關(guān)Spring FactoryBean接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot登錄判斷過(guò)程代碼實(shí)例
這篇文章主要介紹了SpringBoot登錄判斷代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Spring項(xiàng)目集成RabbitMQ及自動(dòng)創(chuàng)建隊(duì)列
這篇文章主要介紹了Spring項(xiàng)目集成RabbitMQ及自動(dòng)創(chuàng)建隊(duì)列,本文內(nèi)容分別在Spring(V5.2.6)和Spring Boot(V2.5.14)兩個(gè)項(xiàng)目中經(jīng)過(guò)了驗(yàn)證,需要的朋友可以參考下2024-02-02
SpringMVC項(xiàng)目異常處理機(jī)制詳解
SpringMVC是一種基于Java,實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式,請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦?;谡?qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開(kāi)發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開(kāi)發(fā)2022-08-08
java對(duì)接微信支付之JSAPI支付(微信公眾號(hào)支付)
這篇文章主要給大家介紹了關(guān)于java對(duì)接微信支付之JSAPI支付(微信公眾號(hào)支付)的相關(guān)資料,微信JSAPI支付是近年來(lái)非常流行的一種支付方式,它使用了微信支付的SDK和demo來(lái)實(shí)現(xiàn)支付接口的對(duì)接,需要的朋友可以參考下2023-07-07
MyBatis?多表聯(lián)合查詢及優(yōu)化方法
大家都知道Hibernate 是全自動(dòng)的數(shù)據(jù)庫(kù)持久層框架,它可以通過(guò)實(shí)體來(lái)映射數(shù)據(jù)庫(kù),通過(guò)設(shè)置一對(duì)多、多對(duì)一、一對(duì)一、多對(duì)多的關(guān)聯(lián)來(lái)實(shí)現(xiàn)聯(lián)合查詢,接下來(lái)通過(guò)本文給大家介紹MyBatis?多表聯(lián)合查詢及優(yōu)化,需要的朋友可以參考下2022-08-08
springboot整合redisson實(shí)現(xiàn)延時(shí)隊(duì)列(附倉(cāng)庫(kù)地址)
延時(shí)隊(duì)列用于管理需要定時(shí)執(zhí)行的任務(wù),對(duì)于大數(shù)據(jù)量和高實(shí)時(shí)性需求,使用延時(shí)隊(duì)列比定時(shí)掃庫(kù)更高效,Redisson提供一種高效的延時(shí)隊(duì)列實(shí)現(xiàn)方式,本文就來(lái)詳細(xì)的介紹一下,感興趣都可以了解學(xué)習(xí)2024-10-10
SpringMVC中MultipartFile上傳獲取圖片的寬度和高度詳解
本篇文章主要介紹了SpringMVC中MultipartFile上傳獲取圖片的寬度和高度,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05

