文档章节

镜子的Spring之旅之自动装配

镜子哥哥
 镜子哥哥
发布于 2016/08/06 17:24
字数 1102
阅读 2
收藏 0
点赞 0
评论 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

详解Java的Spring框架中的注解的用法

使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: 配置文件: 1.2. 引入@Autowired注解(不推荐使用,建议使用@Resource) 类的实现(对成员变量进行标注) 或者...

Airship ⋅ 04/22 ⋅ 0

Spring温故而知新 - bean的装配

按条件装配bean 就是当满足特定的条件时Spring容器才创建Bean,Spring中通过@Conditional注解来实现条件化配置bean package com.sl.ioc;import org.springframework.context.annotation.Bean;...

Java-老刘 ⋅ 05/07 ⋅ 0

Spring Boot 注解(1)

启动类注解 @SpringBootApplication 使用@SpringbootApplication注解 可以解决根类或者配置类(我自己的说法,就是main所在类)头上注解过多的问题,一个@SpringbootApplication相当于@Conf...

细节探索者 ⋅ 06/21 ⋅ 0

Spring IOC知识点一网打尽!

前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 在刷Spring书籍的时候花了点时间去学习了单例模式和工...

Java3y ⋅ 05/22 ⋅ 0

Spring注解学习

原Spring组件注解和注入注解内部方式的区别 收藏 思悟修 发表于 2年前 阅读 1515 收藏 2 点赞 0 评论 0 技术突破边界,服务传递价值,开启云服务之旅的正确方式>>> 摘要: Spring注解@Compon...

中天剑j ⋅ 2017/04/20 ⋅ 0

【问题解决】SSM-@Transactional注解事务无效探讨

Spring SpringMVC MyBatis框架中-@Transactional注解事务无效解决方法 SpringMVC-Spring-MyBatis框架 数据库:SQL SERVER 2008 以前都是用的MySQL数据库,没有出现这个问题,现在换成sql ser...

qq_26525215 ⋅ 2017/08/21 ⋅ 0

项目中SpringMVC、Spring和Struts的区别讲解

导读:近期做到的项目中,用到的框架师SSM(SpringMVC+Spring+Mybatis),那么在这之前用过SSH,这里主要是区分一下SpringMVC和Struts,但是由于SpringMVC和Spring真的也挺容易迷糊的,所以,...

yiguang_820的博客 ⋅ 2017/12/11 ⋅ 0

Spring+mybatis测试项目总结

1.项目目的 a.通过Spring+Mybatis实现通过web访问达成mySql的操作 b.理解Spring+Mybatis的配置 c.理解maven对项目的管理 2.配置文件 a.采用maven约定结构,src/main/java、src/main/resource...

飓风2000 ⋅ 2014/07/26 ⋅ 0

spring mvc 注解详解

1. 声明Bean的注解: 1.1 @Component : 组件,没有明确的角色 1.2 @Service : 在业务逻辑层(service层)使用 1.3 @Repository : 在数据访问层(dao层)使用 1.4 @Controller : 在展现层(MVC--Spr...

坚持30天 ⋅ 2017/10/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Kubeflow实战系列:利用TFJob导出分布式TensorFlow模型

介绍 本系列将介绍如何在阿里云容器服务上运行Kubeflow, 本文介绍如何使用TfJob导出分布式模型训练模型。 第一篇:阿里云上使用JupyterHub 第二篇:阿里云上小试TFJob 第三篇:利用TFJob运行...

全部原谅 ⋅ 16分钟前 ⋅ 0

007. 深入JVM学习—老年代

老年代空间的主要目的是用于存储由Eden发送来的对象,一般在经历好几次“Minor GC”还会保存下来的对象,才会被复制到老年代,这样就可以存放更多的对象,同时在老年代中执行GC的次数也相对较...

影狼 ⋅ 17分钟前 ⋅ 0

常见的一些C#开源框架或者开源项目

原:https://blog.csdn.net/qq_27825451/article/details/70666044 Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更......

whoisliang ⋅ 17分钟前 ⋅ 0

设计模式基本原理

刚开始接触编程这行的时候看过设计模式,当时感觉学这些模式没有太大的用处,当时也看不太懂。但是随着慢慢接触这一行,经过一段时间的编程以后,再回过头来看设计模式,发现设计模式的确是太...

王子城 ⋅ 21分钟前 ⋅ 0

阿里云全面支持IPv6!一文揽尽4位大咖精彩演讲

摘要: 自从去年11月以来,阿里巴巴高度重视数据中心的网络改造、云产品改造、应用及网络改造等多个维度,经过半年以来的建设,阿里云已经完成了域名解析等关键产品的分析,现在阿里云已经完...

传授知识的天使 ⋅ 31分钟前 ⋅ 0

windows Android sdk 配置

1、下载Android SDK,点击安装,直接默认路径即可! 下载地址:http://developer.android.com/sdk/index.html 2、默认路径安装后,安装完成,开始配置环境变量。 3、打开计算机属性——高级系...

阿豪boy ⋅ 34分钟前 ⋅ 0

bash shell script 简明教程

User <--> bash <--> kernel shell is not kernel or part of kernel various shells: tcsh, csh, bash, ksh find the using shell: echo $SHELL find all the shells: cat /etc/shells what......

mskk ⋅ 36分钟前 ⋅ 0

Service Mesh简史

William Morgan Service Mesh是一个相当新的概念,讲它的“历史”似乎有些勉强。就目前而言,Service Mesh已经在部分企业生产环境中运行了超过18个月,它的源头可以追溯到2010年前后互联网公...

好雨云帮 ⋅ 37分钟前 ⋅ 0

10个免费的服务器监控工具

监控你的WEB服务器或者WEB主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。 有许多非常好的服...

李朝强 ⋅ 49分钟前 ⋅ 0

压缩工具之zip-tar

zip 支持目录压缩。使用yum安装zip包,使用yum安装unzip包 zip 1.txt.zip 1.txt #将1.txt文件压缩,新生成的压缩文件为1.txt.zip,原文件保留 zip -r 123.zip 123/ #-r对目录操作。将123/目录...

ZHENG-JY ⋅ 50分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部