Spring如何自动装配bean的通用值?

时间:2018-07-18 11:30:17

标签: java spring

我具有以下代码结构

customer<-scan("E:/Data science course/R/practice/customers.csv",              
          what=List(First_name="",
                    Last_name="",
                    City="", county="", state="",zip=0),
          sep=",", skip=1,)

Spring表示他无法确定正在使用哪种类型的dao。我可以做吗? 我读了几篇文章,但没有找到答案(https://blog.jayway.com/2013/11/03/spring-and-autowiring-of-generic-types/How to Autowire Bean of generic type <T> in Spring?)。

2 个答案:

答案 0 :(得分:2)

我通常这样做:

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将自动接线,然后您将拥有一个可注射的豆MyService<FirstMyDao>

请注意,由于Spring不知道@Service是什么,因此您从通用类中删除了T

答案 1 :(得分:2)

我认为您应该在@Scope("prototype")中使用MyService

具有作用域原型的Bean是为要注入的每个对象创建的。

示例:

@Service
@Scope("prototype")
public class MyService<T extends AbstractMyDao>{

    @Autowired
    private T myDao;
}