6、spring注解学习(组件注册)——使用spring提供的FactoryBean(工厂bean)注入组件
1、创建一个Color类
2、再创建自定义工厂类(实现FactoryBean接口)
//创建一个spring定义的FactoryBean public class ColorFactoryBean implements FactoryBean<Color> { //返回一个Color对象,这个对象会添加到容器中 @Override public Color getObject() throws Exception { return new Color(); } @Override public Class<?> getObjectType() { return Color.class; //返回对象的类型 } //设置这个返回的bean是单例还是多例,true:单例;false:多例 @Override public boolean isSingleton() { return true; } }
3、在spring配置类中注入自定义的工厂类
@Configuration //告诉Spring这是配置类 public class MainConfig { /* * 这里注入的是colorFactoryBean * 在容器中通过id为colorFactoryBean获得bean时为该工厂的getObject返回的对象 * 如果想获得这个工厂bean,则需要在查询时的id前面加一个&,即&colorFactoryBean */ @Bean("colorFactoryBean") public ColorFactoryBean colorFactoryBean() { return new ColorFactoryBean(); } }
4、进行测试
/** * 测试通过FactoryBean方式注入组件 */ @Test public void test03() { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class); Object bean = applicationContext.getBean("colorFactoryBean"); System.out.println("bean的类型:"+bean.getClass()); }
输出结果:
因为查询id为 colorFactoryBean所以默认是获取colorFactoryBean的getObject返回的对象,所以返回对象类型是com.atguigu.bean.Color
若就是想获得这个colorFactoryBean工厂bean,则在查询id前加一个&
即测试方法改为:
/** * 测试通过FactoryBean方式注入组件 */ @Test public void test03() { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class); Object bean = applicationContext.getBean("&colorFactoryBean"); System.out.println("bean的类型:"+bean.getClass()); }
输出结果为:
加&后获得的是com.atguigu.bean.ColorFactoryBean
再修改测试方法
/** * 测试通过FactoryBean方式注入组件 */ @Test public void test03() { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class); Object bean1 = applicationContext.getBean("colorFactoryBean"); Object bean2 = applicationContext.getBean("colorFactoryBean"); System.out.println(bean1 == bean2); }
输出
因为在colorFactoryBean里面的isSingleton方法返回的是true,所以获得的对象是单例的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)