java - 带有构造函数参数和注入依赖项的 Spring Prototype bean
问题描述
我有一个 bean,它有一些单例依赖项,但也有实例独占参数。构造函数类似于:
@Autowired
public PrototypeBean(CustomAttribute attribute, Service1 service1, Service2 service2) {
[...some code...]
}
在上面的例子中,service1
andservice2
是单例的,Spring 的依赖,必须在创建 bean 时注入。
在另一个类上,我有一个ObjectProvider
应该创建上面原型 bean 的实例。我正在尝试这样的事情:
objectProvider.getObject(attribute);
但是 Spring 返回一个错误,说它找不到与参数匹配的构造函数。
我可以轻松地将我的代码从基于构造函数的注入更改为基于属性的注入,并且它会起作用。但这不是一个好的做法,并且使测试更难编写。
有没有办法将 ObjectProvider 与具有自定义参数和依赖项的构造函数一起使用?
解决方案
你可以这样做:
@Configuration
static class PrototypeBeanConfiguration {
private final Service1 service1;
private final Service2 service2;
public PrototypeBeanConfiguration(Service1 service1, Service2 service2) {
this.service1 = service1;
this.service2 = service2;
}
@Bean
@Scope(value = BeanDefinition.SCOPE_PROTOTYPE)
public PrototypeBean(CustomAttribute attribute) {
return new PrototypeBean(attribute, service1, service2);
}
}
推荐阅读
- java - RecyclerView 列表项不响应事件
- android - Android Firebase Firestore 无法反序列化抽象类
- javascript - 如何从 json localStorage 字符串中提取数值?
- tensorflow - 在自动编码器中可视化卷积层的输出
- php - symfony 4 公共文件无法访问
- javascript - 为什么 empty() 方法在 jQuery 中不起作用?
- python - 403 Forbidden on requests.post through Python 尽管谷歌浏览器收到响应
- windows - 用于将 Active Directory 用户添加到组的 Powershell 脚本
- c++ - 如何在数组中找到一个元素,使得左数组的总和等于右数组的总和
- sql - 设置新变量时未识别声明的变量