Spring学习记录(四)——Bean的注解装配

2018.4.15

仅为个人理解 不足之处欢迎指正~

何为注解?

注解也被称为元数据,它为我们在代码中添加信息提供一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据

为什么要使用注解进行装配?

在上一篇文章Spring学习记录(三)——Bean的自动装配中讲到了如byName、byType、constructor等几种Bean的自动装配方法,这些自动装配方法都可以简化配置文件的代码,增强配置文件的可读性。

使用注解进行自动装配与在XML中使用自动装配其实没有太大区别

但是使用注解装配仍然有一些独到之处:

1.使用注解进行自动装配的灵活性更高 我们可以选择性的标注某一个属性对其应用自动装配

2.使用注解进行自动装配可以进一步简化XML配置文件代码


使用注解装配的必要操作

在Spring中使用注解装配 需要在XML中加入一行代码:

Spring学习记录(四)——Bean的注解装配_第1张图片


使用@Autowired注解进行装配:

在上一篇文章的最后 我们保有的一个例子具有如下依赖关系:

Car需要Power与Framework

Framework需要Bottom

Bottom需要Tire

具体属性及方法请参考之前文章的代码

在XML文档中我们可以清楚的通过ref看到依赖关系:



   
      
   
   		
   		
   
 
    
   	
   
   
    
    	
    	
   
   
     
     	
   
     
     	
   
	
  

现在我们将XML进行一个修改:

Spring学习记录(四)——Bean的注解装配_第2张图片

将Car所需的Power属性对应的property元素注视掉

此时运行测试类报错:

Spring学习记录(四)——Bean的注解装配_第3张图片

我们可以看到Power属性并没有注入到Car中

此时我们对Car类中的setPower()方法使用@Autowired注解:

Spring学习记录(四)——Bean的注解装配_第4张图片

注:使用@Autowired需要导入包org.springframework.beans.factory.annotation.Autowired


再次运行测试类:

Spring学习记录(四)——Bean的注解装配_第5张图片

说明Power类确实被注入了Car

当Spring发现我们对于某个Setter方法使用了@Autowired之后,Spring就会尝试对该方法进行byType方式的自动装配


现在我们进行另一个操作:

在Car类中对Power属性进行@Autowired注解 同时删除对power的set方法

Spring学习记录(四)——Bean的注解装配_第6张图片

再次运行测试类 得到正常结果


现在我们进行另一个操作:

在XML中将对Power的装配去掉

再次运行测试类报错

说明@Autowired没有找到匹配的Bean

此时改变@Autowired属性为:


说明该属性不一定必须装配

再次运行测试类(把测试类中对Power的输出删掉):

Spring学习记录(四)——Bean的注解装配_第7张图片

现在我们进行另一个操作:

将刚才删除的对Power的装配添加回来

并添加另一个Power的装配

Spring学习记录(四)——Bean的注解装配_第8张图片

此时运行成功 Spring选择了id为power的Bean作为装配的Bean

但是此时将power改为:

Spring学习记录(四)——Bean的注解装配_第9张图片

运行报错 Spring并不能决定哪一个Bean使我们所需要的

这是我们需要使用@Qualifier注解来为Spring确定一个首选项

Spring学习记录(四)——Bean的注解装配_第10张图片

此时运行成功


@Autowired方式总结:

  • @Autowired实际上是使用了byType方式进行自动装配
  • 它可以标记在set方法上 也可以标记在属性上 也可以标注在构造器上
  • 标住在属性上时 不再需要该属性的setter方法
  • 当有多个满足条件的Bean时 需要用@Qualifier注解


使用@Resource注解进行装配:

@Resource与@Autowired方法基本相似 使用地点也相同

区别在于:

  • 前者默认使用byName自动装配 而后者默认为byType

byName与byType方法本身类似 同时上一篇文章也有较为详细的解释

所以本文不再对@Resource方法详解


使用@Value注解进行属性值的配置:

既然我们可以使用@Autowired和@Resource进行对原来需要ref的对象的注解

我们也可以使用@Value对属性进行赋值

我们将:


进行修改:

去掉property标签

而在Power类中进行如下修改:

Spring学习记录(四)——Bean的注解装配_第11张图片

注意我们此时去掉了setter方法

运行结果表明777这个值注入到了Car中

Spring学习记录(四)——Bean的注解装配_第12张图片


使用注解进行配置的最终结果

我们现在将所有的标签用注解代替

最初的xml文件是这样的:

Spring学习记录(四)——Bean的注解装配_第13张图片

修改后为:

Spring学习记录(四)——Bean的注解装配_第14张图片

运行结果完全一致

Spring学习记录(四)——Bean的注解装配_第15张图片


总结:

使用注解配置注入对象 可以避免xml文件越来越臃肿 同时灵活性更高

使用这种方式之后 xml仅剩下了几个Bean 而在以后将会提到将Bean也去掉的方法

这意味这我们甚至可以不使用元素


谢谢~

你可能感兴趣的:(JavaWeb,Spring)