Spring bean注入方式
版权声明:本文为博主原创文章,如需转载请标注转载地址。
博客地址:http://www.cnblogs.com/caoyc/p/5619525.html
Spring bean提供了3中注入方式:属性注入和构造方法注入
1、属性注入:
<bean id="dept" class="com.proc.bean.Dept">
<property name="id" value="2"/>
<property name="name" value="信息部"></property>
</bean>
属性注入方式,要求属性提供呢setXxx方法。上面提供的是普通属性注入,如果要注入对象属性,可以这样
<bean id="user" class="com.proc.bean.User">
<property name="id" value="1" />
<property name="username" value="caoyc"></property>
<property name="dept" ref="dept"></property>
</bean>
我们看到第三个属性dept,是一个Dept类型的属性,可以通过ref来引用一个已定义的Dept类型的dept对象。
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
User user=context.getBean("user", User.class);
System.out.println(user.getUsername());
System.out.println(user.getDept().getName());
结果我们可以看到
caoyc
信息部
除了可以使用ref来引用外部对象外,我们也可以在user对象内部声明一个Dept对象
<bean id="user" class="com.proc.bean.User">
<property name="id" value="1" />
<property name="username" value="caoyc"></property>
<property name="dept">
<bean class="com.proc.bean.Dept">
<property name="id" value="2"/>
<property name="name" value="信息部"></property>
</bean>
</property>
</bean>
2、使用构造器注入
假如,有一个User类
package com.proc.bean;
public class User {
private int id;
private String username;
private int age;
private double slary;
public User() {
}
public User(int id, String username) {
this.id = id;
this.username = username;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", age=" + age
+ ", slary=" + slary + "]";
}
}
<bean id="user" class="com.proc.bean.User">
<constructor-arg value="1"/>
<constructor-arg value="caoyc"/>
</bean>
这里使用的是: public User(int id, String username)构造方式
这里使用的是下标方式,这里省略了index属性。index属性从0开始。上面的代码相当于
<bean id="user" class="com.proc.bean.User">
<constructor-arg index="0" value="1"/>
<constructor-arg index="1" value="caoyc"/>
</bean>
假设有这样的两个构造方式
public User(int id, String username, int age) {
this.id = id;
this.username = username;
this.age = age;
}
public User(int id, String username, double slary) {
this.id = id;
this.username = username;
this.slary = slary;
}
配置bean
<bean id="user" class="com.proc.bean.User">
<constructor-arg index="0" value="1" />
<constructor-arg index="1" value="caoyc"/>
<constructor-arg index="2" value="18"/>
</bean> <bean id="user2" class="com.proc.bean.User">
<constructor-arg index="0" value="1" />
<constructor-arg index="1" value="caoyc"/>
<constructor-arg index="2" value="1800"/>
</bean>
测试代码
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
User user=context.getBean("user",User.class);
System.out.println(user);
User user2=context.getBean("user2",User.class);
System.out.println(user2);
输出结果
User [id=1, username=caoyc, age=0, slary=18.0]
User [id=1, username=caoyc, age=0, slary=1800.0]
这里都是调用的public User(int id, String username, double slary)这个构造函数。那么怎么调用public User(int id, String username, int age)这个构造函数呢?
方法是,在这里我们需要使用到type属性,来指定参数的具体类型
<bean id="user" class="com.proc.bean.User">
<constructor-arg index="0" value="1" />
<constructor-arg index="1" value="caoyc"/>
<constructor-arg index="2" value="18" type="int"/>
</bean>
输出结果
User [id=1, username=caoyc, age=18, slary=0.0]
User [id=1, username=caoyc, age=0, slary=1800.0]
【其它说明】
1、如果value属性是基本属性直接使用
2、如果valeu属性是其它类型,需要使用ref引用外部类型或使用内部定义方式
3、如果value属性中包含了xml特殊字符,需要使用CDATA来。例如:
<constructor-arg index="1">
<value><![CDATA[<caoyc>]]></value>
</constructor-arg>
Spring bean注入方式的更多相关文章
- Spring 依赖注入方式详解
平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由 ...
- Spring 依赖注入方式详解(四)
IoC 简介 平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想 ...
- Spring Bean基本管理--bean注入方式汇总
依赖注入方式:Spring支持两种依赖注入方式,分别是属性注入和构造函数注入.还有工厂方法注入方式. 依赖注入还分为:注入依赖对象可以采用手工装配或自动装配,在实际应用开发中建议使用手工装配,因为自动 ...
- Spring IOC 注入方式
依赖注入通常有如下两种方式: ①设值注入:IOC容器使用属性的Setter方法来注入被依赖的实例. 设值注入是指IOC容器使用属性的Setter方法来注入被依赖的实例.这种注入方式简单.直观,因而在S ...
- 关于Spring的注入方式
spring的三种注入方式: 接口注入(不推荐) getter,setter方式注入(比较常用) 构造器注入(死的应用) 关于getter和setter方式的注入: autowire=" ...
- Spring IOC 注入方式详解 附代码
引言 Spring框架作为优秀的开源框架之一,深受各大Java开发者的追捧,相信对于大家来说并不陌生,Spring之所以这么流行,少不了他的两大核心技术IOC和IOP.我们这里重点讲述Spring框架 ...
- [spring]Bean注入——在XML中配置
Bean注入的方式有两种: 一.在XML中配置 属性注入 构造函数注入 工厂方法注入 二.使用注解的方式注入@Autowired,@Resource,@Required 本文首先讲解在XML中配置的注 ...
- [spring]Bean注入——使用注解代替xml配置
使用注解编程,主要是为了替代xml文件,使开发更加快速. 一.使用注解前提: <?xml version="1.0" encoding="UTF-8"?& ...
- spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)
这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题 场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据: WebSer ...
随机推荐
- grep 参数
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- android系统各种音量的获取与设置
获取系统音量 通过程序获取android系统手机的铃声和音量.同样,设置铃声和音量的方法也很简单! 设置音量的方法也很简单,AudioManager提供了方法: publicvoidsetStream ...
- [Luogu2656]采蘑菇
题目大意: 给你一个有向图,每条边有一个边权w以及恢复系数k, 你从s点出发乱走,经过某条边时会获得相应的收益w,而当第二次经过这条边时相应的收益为w*k下取整. 问你最大能获得的收益为多少? 思路: ...
- matlab2016b ubuntu命令行安装 + matconvnet的安装
0. 下载安装包 下载的文件有Matlab 2016b Linux64 Crack.rar,R2016b_glnxa64_dvd2.iso,R2016b_glnxa64_dvd1.iso. 1. 拷贝 ...
- 第一个程序-Hello world
创建HelloWorld项目 1.在Android Studio的欢迎界面点击Start a new Android Studio project 2.填写Application name(表示应用名 ...
- Problem E: 零起点学算法34——3n+1问题
#include<stdio.h> #include<math.h> int main() { int n; n<=pow(,); ; scanf("%d&qu ...
- HDU 3360 National Treasures(二分匹配,最小点覆盖)
National Treasures Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- json字符串生成C#实体类的工具
转载:http://www.cnblogs.com/finesite/archive/2011/07/31/2122984.html json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但在服 ...
- nodejs调试利器:supervisor
测试多了,是不是感觉每次要重新node一次app.js,很烦恼? 用supervisor,只有有改动,页面刷新就可以看到效果,不用重启node.js 安装: npm -g install superv ...
- jQuery中,选择器既匹配开头又匹配结尾
jQuery中,选择器既匹配开头又匹配结尾的方法: [attr^=val]attr$=val [attr^=val][attr$=val]