Spring中Bean的配置

原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5859556.html

1、Bean的配置一般都在XML文件中进行配置

2、Bean相关包为:org.springframework.beans和org.springframework.context

3、spring的Bean管理的实现是依靠大量的反射来实现的。

4、Bean定义配置

4.1 Bean标签

  ?id属性:用于指定Bean的名称,在Bean被依赖时使用,在获取Bean时使用等

  ?name属性:用于指定Bean的别名

  ?class属性:用于指定Bean的来源,即创建要创建的Bean的class类(需要全限定名)

  ?singleton属性:用于指定当前Bean的创建模式,若值为true表示为单例模式,false表示原型模式(prototype)

  ?depends-on属性:用于指定当前Bean的依赖Bean,强制指定的Bean在当前Bean初始化之前先完成初始化

  ?init-method属性:用于指定当前Bean的初始化方法,在Bean实例创建好后,首先会调用其指定名称的方法

  ?destory-method属性:用于指定当前Bean的销毁方法,在Bean即将被销毁之前会自动调用该属性指定的方法

  ?lazy-init属性:用于指定当前Bean的初始化时间,若值为true表示在初次调用时才会自动创建实例并初始化,false表示在IoC容器创建的时候就会完成创建和初始化

  ?autowire属性:用于指定当前Bean的依赖关系的自动注入方式,其有五个值:

    ?byName:表示通过id名称来自动匹配;

    ?byType:表示通过class指定的类型来自动装配;

    ?constructor:表示使用构造函数的参数进行自动装配(参数的类型匹配);

    ?autodetect:表示自动进行选择匹配方式,首先进行constructor自动装配,若不存在构造方法则使用byType方式进行自动装配;

    ?no:表示不适用自动装配。

  ?dependency-check属性:用于指定Bean的依赖检查模式,检查依赖关系是否完整,与自动装配合用,其有四个值:

    ?simple:表示针对基本类型、字符串、集合进行依赖检查

    ?object:表示对引用对象进行依赖检查

    ?all:表示对基本类型、字符串、集合、引用对象全部进行依赖检查

    ?none:表示不进行任何依赖检查,默认情况。

  Bean示例:

 1 <?xml version=”1.0”encoding=”utf-8”?>
 2 <!Doctype beans PUBLIC “-//SPRING//DTD BEAN//EN”
 3 “http://www.springframework.org/dtd/spring-beans.dtd”>
 4 <beans>
 5   <bean id=”helloworld” class=”com.dh.spring.HelloWorld” singleton=”true” depends-on=”date” lazy-init=”false” init-mathod=”init” destory-method=”destory”/>
 6   <bean id=”date” class=”java.util.Date”/>
 7 </beans>

4.2 property标签

  ?name属性:用于指定属性的名称,与类中的set方法后方的名称一致

  ?value属性:用于指定该属性的值,用于指定的值是基本类型、字符串类型

  ?ref属性:用于指定该属性的值,用于指定的值是引用对象类型(即其他的Bean),ref后面的值为另一个Bean的id

  ?value标签:用于指定属性的值,类型为基本类型、字符串类型,值为标签内的文本内容,可以使用null值将属性的值设置为null

  ?ref标签:用于指定属性的值,类型为引用对象类型,值为其属性的值,其属性有以下三种:

    ?local属性:用于指定依赖本地Bean实例,即同一XML文件中定义的Bean

    ?bean属性:用于指定依赖的Bean实例,可以是不同XML文件中的Bean

    ?parent属性:用于指定依赖的Bean实例,可以是当前BeanFactory或ApplicationContext的父BeanFactory或ApplicationContext中的Bean

  以下是针对集合的标签

  ?list标签:用于声明该依赖对象为一个list集合,其下用value和ref标签来指定list中的各值(基本、字符串、对象等)

    ?value标签:用于指定list集合中的值,指定的值为基本类型、字符串类型,值为文本内容

    ?ref标签:用于指定list集合中的引用值,指定的值为其他的对象Bean,其用法与之前property标签下的ref标签的用法相同

  ?set标签:用于声明该依赖对象为一个set集合,其用法与list标签相同。

  ?map标签:用于声明该依赖对象为一个map集合,其下用entry标签来声明一个键值对

    ?entry标签:用于声明map集合下的一个键值对,其下用key属性指明键,value/ref标签指明值

      →key属性:用于指明键值对中的键,它一般为字符串

      →value标签:用于指明键值对中的值,类型为基本类型、字符串类型

      →ref标签:用于指明键值对中的值,类型为引用对象类型,即其他的Bean,其用法同之前的ref标签

  map实例1:

 1 <bean id=”helloworld” class=”com.dh.spring.HelloWorld”>
 2   <property name=”pname”>
 3     <map>
 4       <entry key=”mkey1”>
 5         <value>mvalue1</value>
 6       </entry>
 7       <entry key=”mkey2”>
 8         <value>mvalue2</value>
 9       </entry>
10     </map>
11   </property>
12 </bean>

  map实例2:

1 <bean id=”helloworld2” class=”com.dh.spring.HelloWorld2”>
2     <property name=”pname”>
3       <map>
4       <entry key=”mkey1”>
5         <ref bean=”helloworld”/>
6       </entry>
7     </map>
8   </property>
9 </bean>    

  ?props标签:用于声明该依赖对象为一个properties集合,其下用prop标签来指定属性的名称及值(键值对)

    ?prop标签:用于设置集合中的一个键值对

      →key属性:用于指明键值对中的键,一般为字符串

      →文本内容:用于指明键值对中的值,一般为字符串,不用加引号

  props实例:

1 <bean id=”helloword” class=”com.dh.spring.HelloWorld”>
2   <property name=”pname”>
3     <props>
4       <prop key=”pkey1”>pvalue1</prop>
5       <prop key=”pkey2”>pvalue2</prop>
6     </props>
7   </property>
8 </bean>

5、Bean的生命周期

  Bean的生命周期包括Bean的定义,Bean的初始化,Bean的使用,Bean的销毁

  Bean的定义:一般Bean使用XML文件的方式进行定义,定义的时候将Bean之间的依赖关系和属性的赋值都进行了定义

  Bean的初始化:其实Bean的初始化包括Bean的创建和初始化两个方法,Bean的创建和初始化一般是同步进行的,Bean在完成创建后直接就会进行初始化操作,创建的时机与Bean的lazy-init属性的设置有关。

  Bean的使用:在web程序运行期间,发生对某一个Bean的调用时,就会使用这个Bean实例,如果使用编码的方式来获取Bean同样也是Bean的使用,Bean的编码使用方式有三种,第一种是使用BeanWarpper,第二种是使用BeanFactory,第三种就是使用ApplicationContext。

  Bean的销毁:Bean实例在程序退出的时候会进行销毁,而在销毁之前会自动调用Bean的destory-method属性指定名称的方法。

时间: 2024-08-09 19:52:35

Spring中Bean的配置的相关文章

Spring学习系列之——第三章:Spring中Bean的配置(一)

Spring的配置形式有两种:基于XML配置和基于注解配置. Bean的配置方式有以下几种: 通过全类名,即通过反射的方式: 通过工厂方法,有静态工厂方法和实例工厂方法: 通过FactoryBean配置: 通过XML文件配置bean 本篇文章将按照下面的目录来说明基于XML的方式配置bean JavaBean的创建 通过XML配置的方式来配置bean XMLbean的配置: spring的依赖注入的方式 属性注入 构造器注入 工厂方法注入(很少使用) 测试方法 IoC容器的实例化: Applic

Spring中Bean的配置方式之通过工厂方法

通过调用静态工厂方法创建Bean 调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节. 要声明通过静态方法创建的 Bean, 需要在 Bean 的 class 属性里指定拥有该工厂的方法的类, 同时在 factory-method 属性里指定工厂方法的名称. 最后, 使用 <constrctor-arg> 元素为该方法传递方法参数. 相关代码: Car.java private String brand

Spring中Bean的配置方式之FactoryBean

Spring 中有两种类型的 Bean, 一种是普通Bean, 另一种是工厂Bean, 即FactoryBean. 工厂 Bean 跟普通Bean不同, 其返回的对象不是指定类的一个实例, 其返回的是该工厂 Bean 的 getObject 方法所返回的对象 相关代码: Car.java private String brand; private double price; CarFactoryBean.java public class CarFactoryBean implements Fa

Spring中Bean的命名问题及ref和idref之间的区别

一直在用Spring,其实对其了解甚少,刚去了解了一下Spring中Bean的命名问题以及ref和idref之间的区别,略作记录,以备后查. Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: <bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean> 此

Spring框架bean的配置(2):SpEL:引用 Bean、属性和方法。。。

1.SpEL,实现 Person类,其属性如下,其get,set,tostrong方法就不写了 private String name; private Car car; private String city;//city属性是引用了Address中city的属性 private String info;//根据car的price属性来确定info,price大于30万,不大于30万 car类,其属性如下,set,get,tostring方法就不写了 private String brand;

【Spring实战】—— 4 Spring中bean的init和destroy方法讲解

本篇文章主要介绍了在spring中通过配置init-method和destroy-method方法来实现Bean的初始化和销毁时附加的操作. 在java中,我们并不需要去管理内存或者变量,而在C或C++中,可以通过new和delete等方式来创建和删除变量或者对象.在Spring中,如果想要对一个bean进行初始化和结束附加一定的操作,则可以使用上述的两个方法来实现. 在介绍这两个方法前,读者需要了解Spring中bean的生命周期,最常使用的两种生命周期是:singleton和prototyp

[JAVA][Spring]Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: <bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean> 此时需要通过接口getBean(Class<T> requiredType)来获取Bean: 如果该Bean找不到则抛异常:NoSu

JAVA面试题:Spring中bean的生命周期

Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全(Thread-safe)的议题,防止多个线程同时存取共享资源所引发的数据不同步问题. 然而在spring中 可以设定每次从BeanFactory或Appl

Spring 中bean的scop 阅读随笔(记)

bean的scope scope用来声明容器中的对象所应该处的限定场景或者说该对象的存活时间,即容器在对象进入其相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象. Spring容器最初提供了两种bean的scope类型:singleton和prototype,但发布2.0之后,又引入了另外三种scope类型,即request.session和global session类型.不过这三种类型有所限制,只能在Web应用中使用.也就是说,只有在