Bean的装配:

在spring容器内拼凑bean叫做装配。装 配bean的时候,需要告诉容器哪些bean 以及容器如何使用依赖注入将它们配合在一起。

上下文定义文件的根元素是<beans>.<beans>有多个<bean>子元素。每个<bean>元素定义了一个 bean如何被装配到spring容器中。

<beans>

  <bean id="foo" class="...Foo"/>

  <bean id="bar" class="...Bar"/>

</beans>

对bean的最基本的配置包括bean的ID和他的 全称类名(类的全路径)。 <bean id="foo" class="com.xidian.Foo"/> bean的id是foo。

bean的scope 的说明:

spring中的bean缺省情况下是单例模式。始终返回一个实 例。若想返回不同的实例的话需要定义成原型模式。

☞ 尽量使用 scope=”singleton” ,不要使用prototype,因为这样对我们的性能影响较大.

一、set方式给bean注入值

(1)注入依赖,引用其它bean

(2)内部bean

这种方式用的比较少。

(3)继承配置

public class Student

public class Gradate extends Student

在beans.xml文件中体现配置

<!-- 配置一个学生对象 -->

<bean id="student" class="com.hsp.inherit.Student">

<property name="name" value="顺平" />

<property name="age" value="30"/>

</bean>

<!-- 配置Grdate对象 -->

<bean id="grdate" parent="student" class="com.hsp.inherit.Gradate">

<!-- 如果自己配置属性name,age,则会替换从父对象继承的数据  -->

<!-- <property name="name" value="小明"/> -->

<property name="degree" value="学士"/>

</bean>

特别注意:parent="student"属性应该是bean id名,而不是类名Student

1.配置bean的简单属性,基本数据类型和string

<bean id="foo" class="...Foo">

<property name="name">

<value>tom</value>

</property>

</bean>

2.给集合类型注入值

<!-- 给数组注入值 -->
<property name="empName">
<list>
<value>小明</value>
<value>小明小明</value>
<value>小明小明小明小明</value>
</list>
</property>
<!-- 给list注入值 list 中可以有相当的对象 -->
<property name="empList">
<list>
<ref bean="emp2" />
<ref bean="emp1"/>
<ref bean="emp1"/>
</list>
</property>
<!-- 给set注入值 set不能有相同的对象 -->
<property name="empsets">
<set>
<ref bean="emp1" />
<ref bean="emp2"/>
<ref bean="emp2"/>
</set>
</property>
<!-- 给map注入值 map只有key不一样,就可以装配value -->
<property name="empMaps">
<map>
<entry key="11" value-ref="emp1" />
<entry key="22" value-ref="emp2"/>
<entry key="33" value-ref="emp1"/>
</map>
</property>
<!-- 给属性集合配置 --><property name="pp">
<props>
<prop key="pp1">abcd</prop>
<prop key="pp2">hello</prop>
</props>
</property>
</bean>
<bean id="emp1" class="com.hsp.collection.Employee">
<property name="name" value="北京"/>
<property name="id" value="1"/>
</bean>
<bean id="emp2" class="com.hsp.collection.Employee">
<property name="name" value="天津"/>
<property name="id" value="2"/>
</bean>
</beans>

 二、构造函数注入

public Employee(String name, Integer age) {
this.name = name;
this.age = age;
}

<bean id="employee" class="com.hsp.constructor.Employee">
<!-- 通过构造函数来注入属性值 -->
<constructor-arg index="0" type="java.lang.String" value="大明" />
<constructor-arg index="1" type="java.lang.Integer" value="22" />
</bean>

注意:spring反射机制中不支持自动装箱和拆箱。类型一定要严格指定。

String、Integer这种包装类只能用 type="java.lang.Integer"不可以是 type="Integer"或其他。

将构造函数中age的类型改成int基本数据类型,只能 type="int"不能使用type="java.lang.Integer"

比较:

set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选的,构造注入的优势是通过构造强制依赖关系,不可能实例化不 完全的或无法使用的bean。

虽然如此,还是常用set注入的方法。

 三、自动装配属性值

强调:自动装配是在没有显示设置属性值的时候,根据匹配规则进行自动装配。如已经设置,则按显示设置。

<bean id="foo" class="com.xidian.Foo" autowire="autowire type">

1.byName寻找和属性名相同的bean,若找不到,则装不上。

   一定要将bean id和属性名设置一致

public class Master {

private String name;
private Dog dog;

<!-- 配置一个master对象 -->
<bean id="master" class="com.hsp.autowire.Master" autowire="byName">
<property name="name" value="xkj"/>
</bean> <!-- 配置dog对象 -->
<bean id="dog" class="com.hsp.autowire.Dog">
<property name="name" value="小黄"/>
<property name="age" value="3"/>

2.byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常。

public class Master {

private String name;
private Dog dog;

<!-- 配置一个master对象 -->
<bean id="master" class="com.hsp.autowire.Master" autowire="byType">
<property name="name" value="xkj"/>
</bean> <!-- 配置dog对象 -->
<bean id="dog2" class="com.hsp.autowire.Dog">
<property name="name" value="小黄"/>
<property name="age" value="3"/>
</bean>

3.constructor:查找和bean的构造参数一致的一个或 多个bean,若找不到或找到多个,抛异常。按照参数的类型装配

autowire="constructor"

public class Master {

private String name;
private Dog dog;
//构造函数注入dog
public Master(Dog dog) {
this.dog=dog;
}

4.autodetect

说明 :  autowire="autodetect"

3和2之间选一个方式。优先选择3,没有则选择2.

5.defualt

这个需要在<beans defualt-autorwire=“指定” />

当你在<beans >指定了 default-atuowrite后, 所有的bean的 默认的autowire就是 指定的装配方法;

如果没有在<beans defualt-autorwire=“指定” /> 没有  defualt-autorwire=“指定” ,则默认是defualt-autorwire=”no”

<bean autorwire=”default”>则根据defualt-autorwire指定。

6. no: 不自动装配

讨论:自动装配能不用就不用,相对set方式,不够清晰明确,太绕。除非有特殊要求。

 四、从属性文件中读取信息

如果不同的bean需要读取相同的信息,可以使用分散配置。使用占位符变量代替bean装配文件中的硬编码配置。

beans.xml
说明: 当通过 context:property-placeholder 引入 属性文件的时候,有多个需要使用 , 号间隔.
<!-- 引入我们的db.properties文件 -->
<context:property-placeholder location="classpath:com/hsp/dispatch/db.properties,classpath:com/hsp/dispatch/db2.properties"/>- <!-- 配置一DBUtil对象 $占位符号 -->
<bean id="dbutil" class="com.hsp.dispatch.DBUtil">
<property name="name" value="${name}" />
<property name="drivername" value="${drivername}" />
<property name="url" value="${url}" />
<property name="pwd" value="${pwd}" />
</bean> <!-- 配置一DBUtil对象 -->
<bean id="dbutil2" class="com.hsp.dispatch.DBUtil">
<property name="name" value="${db2.name}" />
<property name="drivername" value="${db2.drivername}" />
<property name="url" value="${db2.url}" />
<property name="pwd" value="${db2.pwd}" />
</bean>
db.properties:
name=scott
drivername=oracle:jdbc:driver:OracleDirver
url=jdbc:oracle:thin:@127.0.0.1:1521:hsp
pwd=tiger

补充:

class A{

private String name;

public viod setName(String name){

this.name=name;

System.out.println(“name”+name);

}

}

beans.xml

<bean id=”a” class=”...A”>

<property name=”name” value=”顺平” />    //看set方法,不是属性。不要属性也行

</bean>

底层实现:

A a=new A();

a.setName(“顺平”);

Spring(二)__bean的装配的更多相关文章

  1. Spring实战2:装配bean—依赖注入的本质

    主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须 ...

  2. spring学习总结——高级装配学习四(运行时:值注入、spring表达式)

    前言: 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或构造器参数中.bean装配的另外一个方面指的是将一个值注入到bean的属性或者构造器参数中.在没有学习使用 ...

  3. spring(二、bean生命周期、用到的设计模式、常用注解)

    spring(二.bean生命周期.用到的设计模式.常用注解) Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的. ...

  4. Spring(六)之自动装配

    一.自动装配模型 下面是自动连接模式,可以用来指示Spring容器使用自动连接进行依赖注入.您可以使用元素的autowire属性为bean定义指定autowire模式. 可以使用 byType 或者  ...

  5. 使用Spring IoC进行Bean装配

    Spring概述 Spring的设计严格遵从的OCP(开闭原则),保证对修改的关闭,也就是外部无法改变spring内部的运行流程:提供灵活的扩展接口,也就是可以通过extends,implements ...

  6. Spring学习(三)--高级装配

    一.Spring profile 在开发软件的时候,有一个很大的挑战就是将应用程序从一个环境迁 移到另外一个环境.开发阶段中,某些环境相关做法可能并不适合迁 移到生产环境中,甚至即便迁移过去也无法正常 ...

  7. 什么是Spring的命名空间及使用Spring 的命名空间p 装配属性

    这个就要从XML说了,Spring的配置管理可以利用XML方式进行配置,而XML里面就有命名空间这个概念..实际上就和标签的意思有点像 你给一个命名空间以后,这个XML文件里面就可以用那个命名空间上下 ...

  8. Spring实战3:装配bean的进阶知识

    主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...

  9. Spring框架(3)---IOC装配Bean(注解方式)

    IOC装配Bean(注解方式) 上面一遍文章讲了通过xml来装配Bean,那么这篇来讲注解方式来讲装配Bean对象 注解方式需要在原先的基础上重新配置环境: (1)Component标签举例 1:导入 ...

  10. 使用Spring表达式语言进行装配

    1.1注入外部的值 Spring中,处理外部值的最简单方式就是声明属性源并通过Spring的Environment来检索属性.例如,程序清单3.7展现了一个基本的Spring配置类,它使用外部的属性来 ...

随机推荐

  1. 过年7天乐,学nodejs 也快乐

    自从上次接触nodejs 已经好长时间了,但是年底公司太忙了 ,没时间看, 上次文章在ubuntu上安装nodejs[开启实时web时代] http://www.cnblogs.com/qqlovin ...

  2. Linux Hadoop2.7.3 安装(单机模式) 二

    Linux Hadoop2.7.3 安装(单机模式) 一 Linux Hadoop2.7.3 安装(单机模式) 二 YARN是Hadoop 2.0中的资源管理系统,它的基本设计思想是将MRv1中的Jo ...

  3. iOS-----dSYM 文件分析工具

    来到新公司后,前段时间就一直在忙,前不久 项目 终于成功发布上线了,最近就在给项目做优化,并排除一些线上软件的 bug,因为项目中使用了友盟统计,所以在友盟给出的错误信息统计中能比较方便的找出客户端异 ...

  4. canvas绘图、WebGL、SVG

    目录 一.Canvas 1.1.创建canvas元素 1.2.画线 1.3.绘制矩形 1.4.绘制圆弧 1.5.绘制图像 1.6.绘制文字 1.7.随机颜色与简单动画 二.WebGL 2.1.HTML ...

  5. ExtJs控件属性配置详细

    序言:    1.本文摘自网络,看控件命名像是4.0以前的版本,但控件属性配置仍然可以借鉴(不足之处,以后项目用到时再续完善). Ext.form.TimeField: 配置项:            ...

  6. Ubuntu 14.04 64bit 安装tensorflow(GPU版本)

    本博客主要用于在Ubuntu14.04 64bit 操作系统上搭建google开源的深度学习框架tensorflow. 0.安装CUDA和cuDNN 如果要安装GPU版本的tensorflow,就必须 ...

  7. 从零开始编写自己的C#框架(6)——SubSonic3.0插件介绍(附源码)

    前面几章主要是概念性的东西为主,向初学者们介绍项目开始前的一些知识与内容,从本章开始将会进入实操阶段,希望跟着本系统学习的朋友认真按说明做好每一步操作(对于代码最好是直接照着文档内容在你的IDE中打一 ...

  8. T-SQL:毕业生出门需知系列(八)

    第8课 使用函数处理数据 8.1 函数 [名词]可移植:所编写的代码可以在多个系统上运行 8.2 使用函数 8.2.1 文本处理函数 例1:使用 UPPER() 函数--将文本转换为大写 SELECT ...

  9. 关于MyCAT字符集的验证

    MyCAT默认字符集是UTF8 下面通过查看日志来验证不同的MySQL客户端字符集和服务器字符集对于MyCAT的影响. 日志中与字符集有关的主要有三部分: 1. 初始化MyCAT连接池 2. 心跳检测 ...

  10. Spring 4 + Reactor Integration Example--转

    原文地址:http://www.concretepage.com/spring-4/spring-4-reactor-integration-example Reactor is a framewor ...