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+MyBatisPlus對(duì)Map中Date格式轉(zhuǎn)換處理的方法詳解
在?SpringBoot?項(xiàng)目中,?如何統(tǒng)一?JSON?格式化中的日期格式。本文將為大家介紹一種方法:利用MyBatisPlus實(shí)現(xiàn)對(duì)Map中Date格式轉(zhuǎn)換處理,需要的可以參考一下2022-10-10spring?cloud?Gateway如何處理跨域問(wèn)題
這篇文章主要介紹了spring?cloud?Gateway如何處理跨域問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04Java設(shè)計(jì)模式的策略模式簡(jiǎn)析
這篇文章主要介紹了Java設(shè)計(jì)模式的策略模式簡(jiǎn)析,策略模式中定義了一系列的算法族,算法族指的是類似于一系列的行為、策略,策略模式將一系列的行為封裝成類,既可以說(shuō)是將每一種相類似的行為都封裝成一個(gè)類,也有可能存在特殊的不進(jìn)行封裝的行為,需要的朋友可以參考下2023-12-12ActiveMQ消息隊(duì)列技術(shù)融合Spring過(guò)程解析
這篇文章主要介紹了ActiveMQ消息隊(duì)列技術(shù)融合Spring過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11ConditionalOnProperty注解的作用和使用方式
在SpringBoot項(xiàng)目開(kāi)發(fā)中,@ConditionalOnProperty注解允許根據(jù)配置文件中的屬性值來(lái)控制配置類是否生效,該注解通過(guò)屬性name和havingValue來(lái)判斷配置是否注入,如果application.properties中的對(duì)應(yīng)屬性值為空或不匹配havingValue設(shè)定值2024-09-09dubbo服務(wù)引用之創(chuàng)建Invoker流程詳解
這篇文章主要為大家介紹了dubbo服務(wù)引用二之創(chuàng)建Invoker流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08詳解SpringBoot如何刪除引用jar包中的無(wú)用bean
為了趕速度和直接將之前多模塊的maven項(xiàng)目中的部分模塊,直接以jar包的形式引入到新項(xiàng)目中了,雖然省去了不少開(kāi)發(fā)時(shí)間,導(dǎo)致項(xiàng)目臃腫,啟動(dòng)很慢。本文將用@ComponentScan注解去實(shí)現(xiàn)讓項(xiàng)目只加載自己需要的bean,需要的可以參考一下2022-06-06