Spring 一个类的多个实例注册到spring容器管理

jonhy.luo 2019-07-16 06:29:09
项目中遇到问题大概是这样的:
有一个类Cat,之前因为只有这一个类就直接自动注入交给Spring管理的
@Service("catService")
public class CatService {
private String color;


public void setColor(String color) {
this.color =color;
}

public String getColor(String color) {
return this.color;
}
}
在别的地方用的时候我就直接
@Autowired
private CatService catService;
来使用这个对象。现在因为项目要求,要增加 白猫、黑猫、蓝猫等几种猫。我开始的想法是把CatService 复制几份,每份修改一下配置,几个不同的类对象自动注入。但是这样代码重复率太高了。


于是我想能不能注入几个不同配置的CatService类对象到spring容器,然后根据配置的color来获取需要的实例bean对象。


大概思路:
1、CatService 根据不同配置创建几个对象实例(对象实例内部有依赖注入)
2、将1中产生的对象都注册到spring容器中
3、使用的时候根据工厂模式组装 服务名称 来获取到对应的服务实例。


因为项目中的CatService实际上本身也有自动注入spring中其他对象,所以我参考
https://blog.csdn.net/cgengwei/article/details/79419305
实现 自己new的对象也支持内部的自动注入,到此我就获取到了 白猫、黑猫、蓝猫等几种猫的不同实例对象。

然后参考https://blog.csdn.net/lzjqcc/article/details/78114859
将刚刚的几个实例对象注册到spring容器,这样我在使用的时候根据服务名直接获取对应的bean

参考:https://blog.csdn.net/lovelovelovelovelo/article/details/73733550 根据服务名来获取对应的bean

这样一来就要在spring启动时候自己new几个CatService 对象后手动注册到spring中去。

我想问一下这种场景有什么好的处理模式、方法吗?
如果按我的解决方法去处理 的话 我应该在什么时候创建这几个对象并注册到spring容器呢?我是用的springboot。
在spring beanfactory初始化依赖注入的bean后我再创建bean注册到spring

麻烦大家指点下








...全文
677 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jonhy.luo 2019-07-16
  • 打赏
  • 举报
回复
我找到的是 https://yixiandave.iteye.com/blog/1871070 BeanFactoryPostProcessor 接口或者 ContextRefreshedEvent事件时候来注册自己new的对象 自己绕蒙了,在@Configuration中用@bean注解可以实现多实例注册到容器管理。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧