Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在spring中实现基于AutowiredBean的通用值?_Java_Spring - Fatal编程技术网

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
将自动连接,然后您将拥有一个可注入bean
MyService


请注意,您从泛型类中删除了
@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
将自动连接,然后您将拥有一个可注入bean
MyService


请注意,您从泛型类中删除了
@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;
}