将通用DAO注入服务(Spring 4)

时间:2017-05-30 14:31:36

标签: java spring generics spring-boot dependency-injection

我正在寻找将通用DAO注入服务的解决方案。

更具体地说,我正在寻找一种将通用用户DAO注入登录服务的方法。

就我而言,他们是:

  1. 所有继承自class User
  2. 的用户类型
  3. Foreach类型的User有一个相关的DAO继承自 GenericUserDao<T extends User>
  4. 我的第一个想法是宣布我的服务并注入我的DAO如下:

    public class LoginService<DAO extends GenericUserDao<? extends User>> {
        @Autowired
        DAO userDao;
    }
    
    [...]
    
    // declaration
    @Autowired
    LoginService<SpecialUserDao> userService;
    

    但是在执行此操作时,Spring会将GenericUserDao注入我的LoginService,而不是SpecialUserDao。

    因此,我尝试删除userDao字段上的@Autowired注释,并简单地将我的LoginService声明为:

    public class LoginService<DAO extends GenericUserDao<? extends User>> {
        DAO userDao;
    }
    
    [...]
    
    // declaration
    @Autowired
    LoginService<SpecialUserDao> userService;
    

    但是后来没有注入任何东西,并且我在调用DAO方法时逻辑上得到了NullPointerException。

    注入DAO的正确方法是什么?

0 个答案:

没有答案