[英]How autowired bean based generic value in spring?
我有以下代碼結構
@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{}
斯普林說,他無法確定正在使用哪種類型的刀。 我可以做嗎? 我閱讀了幾篇文章,但沒有找到答案( https://blog.jayway.com/2013/11/03/spring-and-autowiring-of-generic-types/ , 如何自動連接通用類型的Bean <是否在春季? )。
我通常會這樣:
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);
}
}
那應該起作用,因為FirstMyDao fmd
將自動FirstMyDao fmd
,然后您將擁有一個可注入的bean MyService<FirstMyDao>
請注意,由於Spring不知道T
是什么,因此從通用類中刪除@Service
。
我認為您應該在MyService
使用@Scope("prototype")
將為每個要注入對象的對象創建具有范圍原型的Bean。
例:
@Service
@Scope("prototype")
public class MyService<T extends AbstractMyDao>{
@Autowired
private T myDao;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.