版权声明:本文为博主原创文章,如需转载请标注转载地址。

博客地址: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注入方式的更多相关文章

  1. Spring 依赖注入方式详解

    平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由 ...

  2. Spring 依赖注入方式详解(四)

    IoC 简介 平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想 ...

  3. Spring Bean基本管理--bean注入方式汇总

    依赖注入方式:Spring支持两种依赖注入方式,分别是属性注入和构造函数注入.还有工厂方法注入方式. 依赖注入还分为:注入依赖对象可以采用手工装配或自动装配,在实际应用开发中建议使用手工装配,因为自动 ...

  4. Spring IOC 注入方式

    依赖注入通常有如下两种方式: ①设值注入:IOC容器使用属性的Setter方法来注入被依赖的实例. 设值注入是指IOC容器使用属性的Setter方法来注入被依赖的实例.这种注入方式简单.直观,因而在S ...

  5. 关于Spring的注入方式

      spring的三种注入方式: 接口注入(不推荐) getter,setter方式注入(比较常用) 构造器注入(死的应用) 关于getter和setter方式的注入: autowire=" ...

  6. Spring IOC 注入方式详解 附代码

    引言 Spring框架作为优秀的开源框架之一,深受各大Java开发者的追捧,相信对于大家来说并不陌生,Spring之所以这么流行,少不了他的两大核心技术IOC和IOP.我们这里重点讲述Spring框架 ...

  7. [spring]Bean注入——在XML中配置

    Bean注入的方式有两种: 一.在XML中配置 属性注入 构造函数注入 工厂方法注入 二.使用注解的方式注入@Autowired,@Resource,@Required 本文首先讲解在XML中配置的注 ...

  8. [spring]Bean注入——使用注解代替xml配置

    使用注解编程,主要是为了替代xml文件,使开发更加快速. 一.使用注解前提: <?xml version="1.0" encoding="UTF-8"?& ...

  9. spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)

    这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题 场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据: WebSer ...

随机推荐

  1. Xamarin 中Visual Studio创建项目提示错误

    Xamarin 中Visual Studio创建项目提示错误 错误信息:Object reference not set to an instance of an object 出现这种情况,是由于没 ...

  2. JZYZOJ1457 [NOIP2016]换教室 期望dp 动态规划 floyd算法 最短路

    http://172.20.6.3/Problem_Show.asp?id=1457 我不知道为什么我倒着推期望只有80分,所以我妥协了,我对着题解写了个正的,我有罪. #include<cst ...

  3. [BZOJ 1500] 维护序列

    Link: BZOJ 1500 传送门 Solution: 可能平衡树维护序列的所有操作都在这了吧…… 对序列的维护$fhq treap$和$Splay$都能做 有几个注意点: 1.维护序列时始终记得 ...

  4. Codeforces 850B

    题意: 给出一个序列,两种操作: 1.删除一个数,代价为x 2.给一个数+1,代价为y 求最小代价,使这个序列不为空,且所有的数的gcd>1 n<=5e5,a[i]<=1e6 其实思 ...

  5. BZOJ 1221 [HNOI2001] 软件开发(费用流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1221 [题目大意] 每天对毛巾都有一定的需求ni,每天可以花f价值每条购买毛巾, 当天 ...

  6. web安全开发指南--认证

    1.认证 1.1.       认证和密码管理安全规则 1 认证控制必须只能在服务器端执行. 2 除了指定为公开的资源,对所有其它资源的访问都必须先经过认证. 3 为所有关键凭证实施防"暴力 ...

  7. 使用SQL_TRACE进行数据库诊断

    SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法.本文就SQL_TRACE的使用作简单探讨,并 ...

  8. 2011年排名前七位的Linux操作系统。

    下面列出了2011年排名前七位的Linux操作系统. Ubuntu Ubuntu 是一个由全球化的专业开发团队建造的操作系统.它包含了所有您需要的应用程序:浏览器.Office 套件.多媒体程序.即时 ...

  9. jrat

    JRat the Java Runtime Analysis Toolkit What is it? The Java Runtime Analysis Toolkit is a low overhe ...

  10. html Frame、Iframe、Frameset 的区别 详细出处参考:http://www.jb51.net/web/22785.html

    10.4.1 Frameset与Frame的区别首先讲解Frameset与Frame之间的区别. 用来划分框架,每一个框架由标记.必须在之内使用,代码如下: 在上面的例子当中,把页面分为左右两个部分, ...