Spring的FactoryBean<Object>接口示例代碼
FactoryBean接口
FactoryBean是Spring框架中的一個接口,用于創(chuàng)建和管理Bean對象。它的作用是將Bean的創(chuàng)建過程交給FactoryBean實現(xiàn)類來完成,而不是直接由Spring容器來創(chuàng)建。
實現(xiàn)FactoryBean接口的類必須實現(xiàn)getObject()方法,該方法返回的是實際的Bean對象。另外,還可以實現(xiàn)getObjectType()方法,該方法返回的是實際的Bean類型。
下面是一個完整的示例代碼:
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"); } }
在這個示例中,我們定義了一個MyBean類,它有一個name屬性。然后我們定義了一個MyBeanFactory類,它實現(xiàn)了FactoryBean接口,并在getObject()方法中返回了一個MyBean對象。在Main類中,我們通過@Bean注解定義了兩個MyBeanFactory對象,并通過ApplicationContext獲取了這兩個對象的實例,最后輸出了它們的name屬性。
注意,我們在MyBeanFactory類中實現(xiàn)了isSingleton()方法并返回了true,表示該FactoryBean創(chuàng)建的Bean對象是單例的。如果返回false,則表示該FactoryBean創(chuàng)建的Bean對象是非單例的。
到此這篇關(guān)于Spring的FactoryBean<Object>接口的文章就介紹到這了,更多相關(guān)Spring FactoryBean接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot+MyBatisPlus對Map中Date格式轉(zhuǎn)換處理的方法詳解
在?SpringBoot?項目中,?如何統(tǒng)一?JSON?格式化中的日期格式。本文將為大家介紹一種方法:利用MyBatisPlus實現(xiàn)對Map中Date格式轉(zhuǎn)換處理,需要的可以參考一下2022-10-10ActiveMQ消息隊列技術(shù)融合Spring過程解析
這篇文章主要介紹了ActiveMQ消息隊列技術(shù)融合Spring過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11ConditionalOnProperty注解的作用和使用方式
在SpringBoot項目開發(fā)中,@ConditionalOnProperty注解允許根據(jù)配置文件中的屬性值來控制配置類是否生效,該注解通過屬性name和havingValue來判斷配置是否注入,如果application.properties中的對應(yīng)屬性值為空或不匹配havingValue設(shè)定值2024-09-09dubbo服務(wù)引用之創(chuàng)建Invoker流程詳解
這篇文章主要為大家介紹了dubbo服務(wù)引用二之創(chuàng)建Invoker流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08詳解SpringBoot如何刪除引用jar包中的無用bean
為了趕速度和直接將之前多模塊的maven項目中的部分模塊,直接以jar包的形式引入到新項目中了,雖然省去了不少開發(fā)時間,導(dǎo)致項目臃腫,啟動很慢。本文將用@ComponentScan注解去實現(xiàn)讓項目只加載自己需要的bean,需要的可以參考一下2022-06-06