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-10
ActiveMQ消息隊列技術(shù)融合Spring過程解析
這篇文章主要介紹了ActiveMQ消息隊列技術(shù)融合Spring過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11
ConditionalOnProperty注解的作用和使用方式
在SpringBoot項目開發(fā)中,@ConditionalOnProperty注解允許根據(jù)配置文件中的屬性值來控制配置類是否生效,該注解通過屬性name和havingValue來判斷配置是否注入,如果application.properties中的對應(yīng)屬性值為空或不匹配havingValue設(shè)定值2024-09-09
dubbo服務(wù)引用之創(chuàng)建Invoker流程詳解
這篇文章主要為大家介紹了dubbo服務(wù)引用二之創(chuàng)建Invoker流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
詳解SpringBoot如何刪除引用jar包中的無用bean
為了趕速度和直接將之前多模塊的maven項目中的部分模塊,直接以jar包的形式引入到新項目中了,雖然省去了不少開發(fā)時間,導(dǎo)致項目臃腫,啟動很慢。本文將用@ComponentScan注解去實現(xiàn)讓項目只加載自己需要的bean,需要的可以參考一下2022-06-06

