文档章节

镜子的Spring之旅之自动装配

镜子哥哥
 镜子哥哥
发布于 2016/08/06 17:24
字数 1102
阅读 4
收藏 0

Part 1 Bean的自动装配(autowiring)

Autowiring : Spring 自动识别如何装配Bean的依赖关系,有助于减少 <property> 和<constructor-arg> 元素使用。

4 种自动装配类型 :

  • byName 将与Bean属性具有相同名字(或者ID)的其他Bean自动装配到Bean属性中,无匹配则不装配;

<bean autowire = “byName”/>

  • byType 将与Bean属性具有相同类型的其他Bean自动装配到Bean属性中,无匹配则不装配; autowire = “byType” 如果检测到多个bean与属性类型相同,Spring会抛出异常。解决方法: ①Primary属性标识首选Bean。由于其默认为true,so将设置非首选bean primary = “false”; ②取消对某个bean自动装配的候选资格 autowire-candidate = “false”;

  • constructor 把与构造器入参具有相同类型的其他bean自动装配到bean构造器对应入参中; autowire = “constructor”

  • autodetect 首先尝试用constructor进行自动装配,失败再尝试用byType装配。

默认自动装配

如果需要为spring应用上下文中每一个或者其中大多数bean配置相同的自动装配属性,可在根元素 <beans>属性上加一个 default-autowire属性, 这个默认属性可被<bean>的autowire属性覆盖。

混合使用自动装配和显示装配

为bean选择了自动装配,仍可用显示装配某些属性来覆盖自动装配; 例外:使用constructor时必需让Spring自动装配所以入参,即不能混用constructor自动装配和<constructor-arg>元素。

Part 2 面向注解的Bean装配

Spring容器默认禁用注解装配,最简单的启用方式是使用context:annotation-config/元素。

<?xml version=”1.0” encoding=”UTF-8”>
<beans …>
<context:annotation-config/>
<! - - bean declarations go here - - >
</beans>

@Autowired

@Autowired注解可用来标注任意方法(byType);构造器,即使没有使用<constructor-arg>配置bean;直接标注属性,不会受限于private关键字。

没有bean满足条件

@Autowired具有强契约性,其所注明的属性或参数必须是可装配的,如果没有bean可以装配到它标注的,自动装配就会失败,抛出NoSuchBeanDefinitionException。属性不一定非要装配,Null值也是可以接受的情况下,可设置required属性为false来配置自动装配可选:

@Autowired(required=false)
private Instrument instrument;

使用构造器装配时只有一个required可以为true,其余都为false;标注多个构造器时,Spring会选择满足装配条件的入参最多的构造器。

多个bean满足条件 为了帮助判断,可配合使用@Qualifier,指定beanID,将自动装配由byType转为显示的byName,缩小装配范围。

@Autowired
@Qualifier(“guitar”)
private Instrument instrument;

可在guitar的bean中加qualifier元素

<bean …><qualifier value=””/></bean>

可直接用@Qualifier标注Guitar类

创建自定义限定器(Qualifier)

@Inject

Java依赖注入规范 JSR-330(或称at inject)

@Inject与@Autowired类似,范围大,不过没有required属性,所标注的依赖关系不存在必报错,

可要求@Inject注入Provider,Provider接口可实现bean的延迟注入与注入多个实例等功能。

多个bean满足条件时可用@Named配合(通过bean ID),工作方式非常类似于@Qualifier(默认通过Bean ID)。

自定义限定器Qualifier,除了导入的包不一样,与Spring自定义方式相同。

@Value 装配String类型的参数(表达式),他的计算结果可以是任意类型,搭配SpEL表达式,可动态求值。 @Value(””) @Value(”#( )”)

Part 3 Bean 的自动检测(autodiscovery)

Autodiscovery : Spring 自动识别哪些类需要装配成Bean,减少<bean>元素使用。

context:component-scan 除了完成context:annotation-config一样的工作(注解),还允许Spring自动检测和定义Bean,base-package属性标识了所扫描的包。

<beans …>
<context:component-scan base-package=””/>
</beans>

自动检测Bean的标注

@Component——通用构造型(stereotype)注解,标识该类为Spring组件;

@Controller——标识该类为Spring MVC controller;

@Repository——数据仓库;

@Service——服务;

使用@Component标注的任意自定义注解。

过滤组件 context:include-filter 定义需要,context:exclude-filter定义不需要。 type与expression属性组合定义组件扫描策略。

Part 4 基于Java 的Spring 配置

@Configuration 等价于XML中的beans元素。表明这个类中将包含一个或多个Bean定义, 这些bean定义是指由@Bean注解所标注的方法。

@Configuration
public class BeanConfig {
        @Bean
        public Performer Bean() 
               return new BeanClass();
        }
}

© 著作权归作者所有

共有 人打赏支持
镜子哥哥
粉丝 1
博文 19
码字总数 14425
作品 0
广州
Spring中Beans的自动装配概述

以下内容引用自http://wiki.jikexueyuan.com/project/spring/beans-autowiring.html: 在之前的做法上会参照这样的顺序:1、使用元素声明bean,2、并使用XML配置文件中的和元素注入。但现在可...

easonjim
2017/05/22
0
0
Spring_总结_03_装配Bean之自动装配

一、前言 本文承接上一节:Spring总结02_依赖注入 在上一节我们了解到依赖注入的实质就是装配。 这一节我们来学习下装配Bean的相关知识。 二、Bean的装配机制 1.三种装配机制 Spring提供了三...

shirayner
07/27
0
0
【Spring】Autowiredd原理及与Resource注解区别

Autowired注解 Autowired顾名思义,表示自动注入,如下是Autowired注解的源代码: 从Autowired的实现可以看到,Autowired可以用于类的构造方法,类的字段,类的方法以及注解类型上,但是Aut...

weknow
03/06
0
0
Spring实战3-最小化Spring XML配置

显式装配 自动装配Bean属性 一共有四种自动装配类型(需要在Bean配置里添加autowire属性来指定用哪种类型) byName-把与Bean的属性具有相同名字或ID的其他Bean自动装配到Bean的对应属性中。如...

huntering
2015/08/10
0
0
《Spring5学习》 01 装配Bean之自动化装配

Spring的自动化装配就便利性方面远远优于其他装配方法,这也是业界目前主要采用的Bean装配机制。Spring基于组建扫描和自动装配实现自动化装配,能将用户的显示配置降到最低。以下通过一段代码...

老韭菜
08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

中秋快乐!!!

HiBlock
19分钟前
0
0
Node安装教程

1、安装最新版的node 2、设置相关目录(以D盘为例) 分别建立目录:D:\node,D:\node\node-globa,D:\node\node-cache 命令行输入: // 设置npm国内镜像 npm config set registry https://re...

Mohan710
47分钟前
1
0
中国发布域名系统基础软件 “红枫”

9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软件 “红枫(Maple DNS)”。 9月12日消息,域名工程中心(英文缩写 ZDNS)发布了宣称自主开发的域名系统基础软...

问题终结者
今天
3
0
Shell编程(分发系统介绍、expect远程登录、expect远程执行命令、expect传递参数)

分发系统介绍expect 分发系统expect即分发脚本,是一种脚本语言;通过他可以实现传输,输入命令(上线代码) 应用场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者...

蛋黄_Yolks
今天
2
0
Java Http请求工具类

public static String httpPost(String source, String params) {URL url = null;HttpURLConnection conn = null;OutputStream os = null;String ret = null;try {......

yuewawa
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部