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 ...
随机推荐
- Linux基础系列-Day4
top系统监控 top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具.通过top命令所提供的互动式界面,用热键可以管理. [root@centos-py ...
- [LOJ6191][CodeM]配对游戏(概率期望DP)
n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈.问最终栈中元素个数的期望是多少. 首先容易想到用概率算期望,p[i][j][k]表示已加入i个数,1有j个,总长为 ...
- bzoj 3728: PA2014Final Zarowki
3728: PA2014Final Zarowki Description 有n个房间和n盏灯,你需要在每个房间里放入一盏灯.每盏灯都有一定功率,每间房间都需要不少于一定功率的灯泡才可以完全照亮.你可 ...
- jsp ajax实例讲解
下面介绍JSP前台表单内容通过Ajax异步提交到后台Servlet进行校验(校验方式多种,包括提取数据库信息,校验用户名是否重复等),异步在JSP表单页面显示校验结果信息的基本过程. 一.说明: 1. ...
- ajax 同步和异步的区别
举个例子:普通B/S模式(同步)AJAX技术(异步)同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事异步: 请求通过事件触发->服务器处理(这时浏览 ...
- [转]servlet配置中init-param
需要初始化的参数比如你的servlet里面有个属性为int total=0默认是0,你想让他初始时50则用init-param 给他赋值 init-param面对应的参数名和值,是给servlet在初 ...
- Educational Codeforces Round 6 D. Professor GukiZ and Two Arrays 二分
D. Professor GukiZ and Two Arrays 题目连接: http://www.codeforces.com/contest/620/problem/D Description ...
- NHibernate官方文档中文版--ISessionFactory的配置(ISessionFactory Configuration)
由于NHibernate是被设计应用在许多不同环境中的,因此它存在很多配置参数.幸运的是,这些参数大多都有合理的默认值,而且NHibernate发布的时候伴随着一个App.config 例子(可在sr ...
- 这些年,我们一直追随的.NET
闲来无事,浏览自己的QQ空间,意外发现自己在13年1月份的发在QQ空间写的一片关于技术的随笔,觉得应该将其移到这里: 这些年,我们一直追随的.NET 前两天,意外地看到了.NET平台为异 ...
- [转] Download Images from Multiple Maps
转载自 李旭, Tool: Download Images from Multiple Maps Summary SAS Planet是一款俄罗斯绿色免费软件,一直持续不断更新.该软件最大的一个特点就 ...