Spring Bean的3种装配方式
Spring注入依赖的4个注解
- @Value 注入int、float、String等基本数据类型,只能标注在成员变量、setter方法上。
- @Autowired 按类型自动装配,可标注在成员变量(官方不推荐)、构造方法、setter方法上。
- @Qualifier 按名称自动装配,需要和@Autowired搭配使用,只能标注在成员变量(官方不推荐)、setter方法上。
- @Resource 按名称或类型自动装配,需要第三方包 javax.annotation.jar 的支持,只能标注在成员变量、setter方法上。
以上3个注解用于自动装配其它bean的实例,尽量标注在setter方法上。
复杂类型需要用xml方式注入。
使用spring的注解,需要引入spring-aop.RELEASE.jar。
如果只使用了上面这些依赖注入的注解,需要在xml中启用注解,还需要配置<bean>:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config></context:annotation-config>
<bean name="b" class="com.chy.bean.B" />
</beans>
如果使用了类注解(@Controller、@Service、@Repository、@Component),直接使用包扫描即可,不必配置<bean>:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.chy.bean" />
</beans>
包扫描已经包括了启用注解的功能。
@Value
用于注入基本类型,只能标注在成员变量、setter上,不能标注在构造方法上。
直接标注在成员变量上:(不需要setter方法)
@Component
public class B {
@Value("20")
private int age;
//......
}
spring会自动将引号中的值转换为需要的类型。值必须放在引号中。
标注在setter方法上:
public class B {
private int age;
@Value("20")
public void setName(int age) {
this.age = age;
}
//.....
}
@Value不能和 参数是该成员变量的构造方法 一同使用。
比如说使用@Value注入了age字段,该类中就不能有A(int age)这个构造方法。
@Autowired
按类型自动装配,可以标注在成员变量、构造方法、setter方法上,官方不推荐标注在成员变量上。
标注在构造方法上时,可缺省@Autowired,因为使用包扫描时,如果未显式配置依赖注入,默认使用构造方法的自动装配(按参数类型)。
@Qualifier
@Component
public class A {
private B b; @Autowired
@Qualifier("b")
public void setB(B b) {
this.b = b;
} public A(B b) {
this.b = b;
}
}
@Qualifier不能单独用,需要和@Autowired搭配使用。
是按名称的自动装配,需要在@Autowired("name")写上所依赖bean的name。
只能标注在成员变量(官方不推荐)、setter方法上,虽然不能标注在构造方法上,但可以出现对应的构造方法。
@Resource
spring提供了@Resource注解,但并未提供此注解的实现。
@Resource需要第三方包的支持:javax.annotation.jar。
下载地址:http://www.java2s.com/Code/Jar/j/Downloadjavaxannotationapi12sourcesjar.htm

如果使用maven,会自动下载spring依赖的第三方包commons-logging.jar、javax.annotation.jar,无需我们手动下载添加。
@Component
public class A {
// @Resource(name = "b")
@Resource(type = B.class)
private B b; public void setB(B b) {
this.b = b;
} public A(B b) {
this.b = b;
}
}
@Resource可按名称或按类型自动装配,可在()中指定。
name的值是String形式,type的值是class形式。
@Component
public class A {
private B b; @Resource
public void setB(B b) {
this.b = b;
} public A(B b) {
this.b = b;
}
}
未指定规则时,默认先按名称装配,找不到满足要求的bean,再按类型装配。
@Resource只能标注在成员变量、setter方法上,但可以出现对应的构造方法。
Spring Bean的3种装配方式的更多相关文章
- spring Bean的三种配置方式
Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...
- spring Bean的三种注入方式
1.构造函数注入: 构造函数的注入方式分为很多种 (1)普通构造函数,空参数的构造函数 <bean id="exampleBean" class="examples ...
- spring bean的三种管理方式·
1.无参构造函数 1.xml文件配置内容 <!--无参构造函数--> <bean id="bean1" class="com.imooc.ioc.dem ...
- Spring MVC 实验2-Bean的几种装配方式及基本用法
实验二:Bean的几种装配方式及基本用法 实验目的: (1)掌握2种基于XML的装配方式:设值注入(Setter Injection)和构造注入(Constructor Injection) . ( ...
- Spring Boot 项目几种启动方式
Spring Boot 项目几种启动方式 1. 使用 main 启动 jar xxxx.jar 2. 使用 mvn 启动 mvn spring-boot:run 3. 使用 Spring Boot c ...
- Spring三 Bean的三种创建方式
创建Bean的三种方式在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法.实际上,Spring ...
- Spring中bean的四种注入方式
一.前言 最近在复习Spring的相关内容,这篇博客就来记录一下Spring为bean的属性注入值的四种方式.这篇博客主要讲解在xml文件中,如何为bean的属性注入值,最后也会简单提一下使用注解 ...
- Spring bean的bean的三种实例化方式
Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean ...
- Spring IOC以及三种注入方式
IOC是spring的最基础部分,也是核心模块,Spring的其他组件模块和应用开发都是以它为基础的.IOC把spring的面向接口编程和松耦合的思想体现的淋漓尽致. IOC概念 IOC(Invers ...
随机推荐
- 如何停止处于stopping状态的windows服务(使用taskkill)
工作中有时需要启动和停止windows service,有时候会出现服务处于stopping或者starting的状态,但是,在services界面中,start service/stop servi ...
- 如何诊断rac环境sysdate 返回的时间错误
最近处理了若干rac环境访问sysdate错误的时间返回.而这个问题通常是一个数据库链接是由现在Listener创建的情况下.并且.大部分情况下都是和时区设置相关的.在这篇文章中我们会针对怎样诊断这样 ...
- 张汝京:CIDM模式进可攻、退可守,建议尝试
飞象网讯(路金娣/文)大约30多年前一些美国.日本和欧洲的IDM半导体工厂把多余的产能出来做代工服务,因为代工的公司不会与客户竞争,所以专业代工的模式成为半导体市场的新宠.那么,究竟国内半导体行业更加 ...
- WPF 自定义的图表(适用大量数据绘制)下
原文:WPF 自定义的图表(适用大量数据绘制)下 上一篇文章中讲了WPF中自定义绘制大量数据的图标,思路是先将其绘制在内存,然后一次性加载到界面,在后续的调试过程中,发现当数据量到达10W时,移动鼠标 ...
- android该怎么办iphone那种画面抖动的动画效果(含有button和EditText)
首先在效果图: 要做到抖动效果按钮,能够这样做.设定anim房源res以下.创建一个button_shake.xml <? xml version="1.0" encodin ...
- debian8 root无法远程登录解决办法
改一下root 密码,应该就能本地登录了. 改/etc/ssh/sshd.conf,然后重启ssh就能远程登录了:PermitRootLogin yesPermitEmptyPasswords no
- 关于WPF的ComboBox中Items太多而导致加载过慢的问题
原文:关于WPF的ComboBox中Items太多而导致加载过慢的问题 [WFP疑难]关于WPF的ComboBox中Items太多而导致加载过慢的问题 ...
- iOS9 Spotlight使用
1.Spotloight是什么? Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotl ...
- 在IE浏览器 使用PHPExcel导出文件时时 文件名中文乱码
1.当我们使用IE内核的浏览器下在PHPExcel报表时(谷歌.火狐浏览器正常, IE浏览器,360浏览器的兼容模式报错),会出现如下错误: 2.解决办法: 在下载文件时,对当前的浏览器进行判断, 如 ...
- 内存可用性判断 IsBadCodePtr IsBadReadPtr 等等
程序异常崩溃,多数是有内存访问异常引起.为定位崩溃位置通常考虑加强内存访问控制,如此有必要进行内存可用性判断,从<Windows核心编程>中看到内存指针的可用性判断方法,感觉还不错,此处记 ...