问答详情
源自:4-3 Spring Bean装配之Autowired注解说明-2

@Autowired讲得不是很清楚

@Autowired讲得不是很清楚,直说了可以注解属性 set方法 构造器。没说这个属性是接口申明的还是实现类申明的。看了代码知道是接口申明的,可以注入实现类的实例。以前通过xml定义bean比较容易明白这个过程。可是注解的话教程使用了自动扫描。如果这个包下面某接口有多个实现类呢?自动扫描就会都装载到IOC容器。那注入的时候怎么确定是哪个实现类的实例呢??

提问者:键盘兔 2015-11-15 13:58

个回答

  • Massami
    2016-07-26 16:47:29

    IOC是一种容器,也就是说配置文件中配置bean就相当于spring为你生产这个类的对象,并且管理这个对象,而你自己不用去实例化对象和销毁。接口本身是不能实例化对象的,如果在接口上面注解就违反了这一原则。

  • Angular_Dracula
    2016-03-07 10:08:16

    注解一般都是放在实现类上面的吧,老师中的代码也是写在实现类上的,而不是写在接口上,因为一个包内类的类名必须要不一样,要是一样的话不就起冲突了么,所以ioc容器加载bean的时候就可以从类名来找了,

  • 飞奔的小粉兔
    2016-01-13 10:39:18

    我也觉得讲的不是很清楚。

    在spring注入的时候分为设值注入和构造注入,写配置文件的。

    设值注入时候,属性需要有set方法,如果用注解的话 比如service层中用@service注解注入了,其中包含属性CodeMapper那么在此属性上用@Autowired就相当于用配置文件中配置的时候,需要些写的set方法了。

    构造注入也是同理。

    说白了,@Autowired注解写在成员变量上就不用写set方法了。它与@reposotory @service @controller联合使用就相当于设值注入和构造注入

  • 键盘兔
    2015-11-15 16:21:35

    自己测试发现报异常 不能有两个实现类。我感觉好晕啊