发表于: 2017-09-18 23:37:06
1 802
今天完成的事:
了解了Spring的自动装配,分为两种,通过xml文件来进行自动装配的配置或者使用注解的方式来进行自动装配的配置
如果使用xml配置文件来进行自动装配的话可以使用<Bean>元素的autoWrite属性来设置该Bean使用自动配置
autoWrite的值可以是一下四种:
下面实例使用byName来主动装配Bean对象
上图中Bean对象test因为将属性autoWire设置为"byName",即使在Bean对象test中没有显式配置,也会将Cat对象的引用注入到test对象的属性cat当中,完成了自动装配。
了解的使用注解来完成自动装配,可以使用Spring自带的注解或这JAVA依赖注入标准提供的两种注解
Spring自带的可以使用@AutoWire来标注一个Seter或一个属性来进行自动装配,下图展示了配置文件和java文件中使用注解来完成自动装配
上图中通过注解来标注Private SaySomeThing cat;Spring会自动将和cat类型一致的Bean对象或者和"cat"一致的Bean对象id来进行自动装配
下图为xml配置文件
上图中并未显示地装配任何Bean对象,只是声明了Bean对象,执行结果如下
使用@AutoWried注解的原理如下:
首先检测xml配置文件中是否有于被注入属性名称相同的ID的Bean对象。若有则注入,若没有则判断是否有于被注入属性相同类型的Bean对象。若是有多个于被注入属性相同类型的Bean对象,会显示地进行提示,运行程序会报异常。针对这种情况,可以使用Spring的注解@Qualifier()来进行限定。如下图
上图中的Bean对象cat和dog都实现了SaySomeThing接口。查看下图若不是用@Qualifier注解会显示的进行提示,必须使用该注解来进行限定
因为xml配置文件中没有id属性为"animal"的Bean对象,因此不适用名称来进行装配,改用类型来装配。但是xml配置文件中却又有两个实现了SaySomeThing的Bean对象,因为实现了SaySomeThing接口因此这两个都匹配,SPring不知道如何选择,所以会不进行选择,直接显示地指出。
上图中使用了@Qualifier("dog")来指定了名称为"dog"的属性。因此是可以顺利完成装配的
除了@Qualifier限定器还可以自定义限定器,下图为自定义一个限定器@meatAnimal
将dog类标注为meatAnimal
下图为配置文件
下图为HelloWorld类,使用@AutoWired来进行自动配置,并使用meatAnimal来进行限定,只有被标注为@meatAnimal的Bean对象才会被注入,如果有多个那么还是无法识别,依旧得缩小限定范围
明天计划的事情:
继续学Spring
遇到的困难:
无
收获:
初步了解了Spring的自动装配
评论