簡體   English   中英

Spring如何自動裝配bean的通用值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM