为什么自动注入写的是接口名

Posted kisshappyboy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么自动注入写的是接口名相关的知识,希望对你有一定的参考价值。

来自某程序员一个问答问题:

1. 有一点没明白,为什么注解@repository注解的是接口UserDAO的实现类UserDAOImpl,而在UserServiceImpl中使用@Autowired注解注入属性private UserDAO  userDAO自动装配,为什么最后得到的是UserDAOImpl的实例。

-----上面是某位同学的提问,我也有这样的疑问----

2. @Service注解服务层的时候,在unitest中,是从ApplicationContext.getBean("实现类名字,首字母小写") 这样获取的。

也就是说,在容器中初始化的Bean应该按照实现类名字规则。 这一点如果是用xml配置是不存在这样的问题,因为xml可以指定id, id 是接口,class指向实现类。

3. 来自网友的回答 :这个其实是创建了实现类的对象但引用了接口类型,即"InjectionDao injectionDao = new InjectionDaoImpl()", 这个其实是Java多态性(向上转型)的一种应用。在实现类处加@Repository注解,意思就是new InjectionDaoImpl(), 而在InjectionServiceImpl中定义属性InjectionDAO injectionDAO就是将new出来的这个InjectionDaoImpl对象向上转型为InjectionDao类型。

以上是关于为什么自动注入写的是接口名的主要内容,如果未能解决你的问题,请参考以下文章

spring的两种属性注入方式setter注入和构造器注入或者自动注入

Spring--SpringBeanIOC的依赖注入

解决Intellij IDEA中Mybatis Mapper自动注入警告

Spring第八章:Spring自动注入

如何将自己写的js注入到网站网页中

自己写的一个依赖注入例子