@Autowired讲得不是很清楚,直说了可以注解属性 set方法 构造器。没说这个属性是接口申明的还是实现类申明的。看了代码知道是接口申明的,可以注入实现类的实例。以前通过xml定义bean比较容易明白这个过程。可是注解的话教程使用了自动扫描。如果这个包下面某接口有多个实现类呢?自动扫描就会都装载到IOC容器。那注入的时候怎么确定是哪个实现类的实例呢??
IOC是一种容器,也就是说配置文件中配置bean就相当于spring为你生产这个类的对象,并且管理这个对象,而你自己不用去实例化对象和销毁。接口本身是不能实例化对象的,如果在接口上面注解就违反了这一原则。
注解一般都是放在实现类上面的吧,老师中的代码也是写在实现类上的,而不是写在接口上,因为一个包内类的类名必须要不一样,要是一样的话不就起冲突了么,所以ioc容器加载bean的时候就可以从类名来找了,
我也觉得讲的不是很清楚。
在spring注入的时候分为设值注入和构造注入,写配置文件的。
设值注入时候,属性需要有set方法,如果用注解的话 比如service层中用@service注解注入了,其中包含属性CodeMapper那么在此属性上用@Autowired就相当于用配置文件中配置的时候,需要些写的set方法了。
构造注入也是同理。
说白了,@Autowired注解写在成员变量上就不用写set方法了。它与@reposotory @service @controller联合使用就相当于设值注入和构造注入
自己测试发现报异常 不能有两个实现类。我感觉好晕啊