Spring FactoryBean 接口
FactoryBean
该接口用于在BeanFactory中提供个别对象自己的工厂实现。
作用
实现该接口后,获取到bean不再是实现这个接口的对象,而是其中指定的需要返回的对象。 可以使用它来创建自己的复杂对象(自己的工厂)
实现步骤
1.实现接口
public class MyConnectionFactoryBean implements FactoryBean<Connection>{
/**
* 对象实例的创建方式(自己实现对象的创建,不再由spring来创建)
*/
public Connection getObject() throws Exception{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getonnection("jdbc:mysql://localhost:3306/test","test","123456");
return conn;
}
/**
* 返回需要创建的对象实例的类型
*/
public Class<?> getObjectType(){
return Connection.class;
}
/**
* 指定对象实例是否以单例方式创建
*/
public boolean isSingleton(){
return true;
}
}
2.配置
<!--
由于 MyConnectionFactoryBean 实现了 FactoryBean接口, 所在配置时我们希望获取到的bean并不是MyConnectionFactoryBean 而是该工厂所创建的复杂对象:Connection,
所以通过Spring getBean方法获取到的bean对象就是 Connection 对象
-->
<bean id="myConnection" class="com.learn.MyConnectionFactoryBean"></bean>
3.获取工厂Bean创建的实例对象
@Test
public void test() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
Object conn = context.getBean("myConnection"); //获取到的是Connection 对象实例, 而不是 MyConnectionFactoryBean 实例
System.out.println(conn);
}
获取工厂Bean本身
@Test
public void test() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
Object conn = context.getBean("&myConnection");//添加&获取工厂Bean
System.out.println(conn);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义