Spring错误:BeanNotOfRequiredTypeException

时间:2011-07-05 17:46:59

标签: java spring dependency-injection

我的控制器包含以下注释:

@Resource(name="userService")
private UserDetailsServiceImpl userService;

并且服务本身具有以下内容:

@Service("userService")
@Transactional
public class UserDetailsServiceImpl implements UserDetailsService {

    @Resource(name = "sessionFactory")
    private SessionFactory sessionFactory;

但是我在启动时收到以下错误:

  

注入资源依赖项   失败;嵌套异常是   org.springframework.beans.factory.BeanNotOfRequiredTypeException:   Bean命名为'userDetailsS​​erviceImpl'   必须是类型   [myapp.service.UserDetailsS​​erviceImpl],但实际上是   输入[$ Proxy19]

2 个答案:

答案 0 :(得分:8)

应该是

@Resource(name="userService")
private UserDetailsService userService;

Spring使用接口类型来进行依赖注入,而不是实现类型

答案 1 :(得分:3)

更改为(界面而非具体类):

@Resource(name="userService")
private UserDetailsService userService;

从此幸福地生活。

长版本:在运行时,默认情况下,Spring会使用实现类的所有接口的 something 替换您的类。如果您注入接口而不是具体类型,则不关心实现此接口的确切类型。

在您的情况下,添加@Transactional注释会导致您的bean被具有事务功能的AOP代理替换。如果删除此注释,您的代码将运行正常。但是,依赖接口是一个好主意,而不是具体实现。