Java 如何在spring中实现基于AutowiredBean的通用值?
我有以下代码结构Java 如何在spring中实现基于AutowiredBean的通用值?,java,spring,Java,Spring,我有以下代码结构 @Component public class MyServiceUser{ @Autowired private MyService<FirstMyDao> dao; } @Service public class MyService<T extends AbstractMyDao>{ @Autowired private T myDao; } abstract class AbstractMyDao{} @Re
@Component
public class MyServiceUser{
@Autowired
private MyService<FirstMyDao> dao;
}
@Service
public class MyService<T extends AbstractMyDao>{
@Autowired
private T myDao;
}
abstract class AbstractMyDao{}
@Repository
class FirstMyDao extends AbstractMyDao{}
@Repository
class SecondMyDao extends AbstractMyDao{}
@组件
公共类MyServiceUser{
@自动连线
私有MyService-dao;
}
@服务
公共类MyService{
@自动连线
私人T myDao;
}
抽象类AbstractMyDao{}
@存储库
类FirstMyDao扩展了AbstractMyDao{}
@存储库
类SecondMyDao扩展了AbstractMyDao{}
斯普林说他无法决定使用哪种类型的刀。我能做吗?
我读了几篇文章,但没有找到答案(,) 我通常会这样做:
public class MyService<T extends AbstractMyDao>{
private T myDao;
public MyService(T dao){
myDao = dao;
}
}
@Configuration
public class ServiceConfig {
@Bean
public MyService<FirstMyDao> myServiceFirstMyDao(FirstMyDao fmd){
return new MyService(fmd);
}
}
公共类MyService{
私人T myDao;
公共MyService(T dao){
myDao=dao;
}
}
@配置
公共类ServiceConfig{
@豆子
公共MyService myServiceFirstMyDao(第一个MyDao fmd){
返回新的MyService(fmd);
}
}
这应该是可行的,因为firstmydaofmd
将自动连接,然后您将拥有一个可注入beanMyService
请注意,您从泛型类中删除了
@Service
,因为Spring不知道T
是什么
public class MyService<T extends AbstractMyDao>{
private T myDao;
public MyService(T dao){
myDao = dao;
}
}
@Configuration
public class ServiceConfig {
@Bean
public MyService<FirstMyDao> myServiceFirstMyDao(FirstMyDao fmd){
return new MyService(fmd);
}
}
公共类MyService{
私人T myDao;
公共MyService(T dao){
myDao=dao;
}
}
@配置
公共类ServiceConfig{
@豆子
公共MyService myServiceFirstMyDao(第一个MyDao fmd){
返回新的MyService(fmd);
}
}
这应该是可行的,因为firstmydaofmd
将自动连接,然后您将拥有一个可注入beanMyService
请注意,您从泛型类中删除了
@Service
,因为Spring不知道T
是什么。我认为您应该在MyService
中使用@Scope(“prototype”)
为注入的每个对象创建具有作用域原型的Bean
例如:
@Service
@Scope("prototype")
public class MyService<T extends AbstractMyDao>{
@Autowired
private T myDao;
}
@服务
@范围(“原型”)
公共类MyService{
@自动连线
私人T myDao;
}
我认为您应该在MyService
中使用@Scope(“原型”)
为注入的每个对象创建具有作用域原型的Bean
例如:
@Service
@Scope("prototype")
public class MyService<T extends AbstractMyDao>{
@Autowired
private T myDao;
}
@服务
@范围(“原型”)
公共类MyService{
@自动连线
私人T myDao;
}