spring 的配置详解及容器

什么是bean?

bean就是由Spring容器初始化、装配及被管理的对象,除此之外,bean就没有特别之处了(与应用中的其他对象没有什么区别)。而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。

 

1、 bean的配置:

生命周期

1> bean的定义(见下一页表格附件)

2> bean的初始化(两种方式):

·在配置文档中通过指定init-method属性来完成(推荐)

·实现org.springframework.beans.factory.InitializingBean接口

3> bean的使用(三种)

·详细见第2节。

4> bean的销毁(两种方式):

·在配置文档中通过指定destroy-method属笥来完成(推荐)

·实现org.springframework.beans.factory.DisposableBean接口

ref的属性指定依赖的三种模式:

1> local性性指定:被参考引用的bean在同一个xml文件中,且是用id命名的。

2> bean属性指定:同一个或者不同的xml中均可(推荐)

3> parent属性指定:引用父bean

 

Bean自动装配的5种模式  autowire=***

1> byName模式  按名字自动装配

2> byType模式  按类型自动装配

3> constructor模式 按构造函数的类型自动装配

4> autodetect模式 自动按先constructorbyType模式匹配。

5> no模式 (默认) 不自动装配

 

Bean依赖检查的4种模式 dependency-check = ***

1> simple  对基本类型、字符串和集合进行依赖检查

2> object  对依赖的对象进行检查

3> all  对全部属属性进行检查

4> none  (默认)不检查

 

集合的注入方式

1> List

2> Set

3> Map

4> Properties

 

Bean如下:

示例代码:

public class SomeBean { 
    private String[] someStrArray; 
    private SomeObj[] someObjArray; 
    private List someList; 
    private Map someMap; 

    private Set test; 

private Properties test2; 


    ....

}

 示例配置:

<beans> 
    <bean id="someBean" class="onlyfun.caterpillar.SomeBean"> 
        <property name="someArray"> 
            <list> 
                <value>Hello!Justin!</value> 
                <value>Hello!Momor!</value> 
                <value>Hello!Bush!</value> 
            </list> 
        </property> 
        <property name="someObjArray"> 
            <list> 
                <ref bean="someObj1"/> 
                <ref bean="someObj2"/> 
            </list> 
        </property> 
        <property name="someList"> 
            <list> 
                 <value>Hello!Justin!</value> 
                 <ref bean="someObj1"/> 
                 <ref bean="someObj2"/> 
            </list> 
        </property> 
        <property name="someMap"> 
            <map> 
                 <entry key="somekey1"> 
                     <ref bean="someObj1"/> 
                 </entry> 
                 <entry key="somekey2"> 
                     <value>Hello!Justin!</value> 
                 </entry> 
            </map> 
        </property>

<property name="test"> 

<set> 
    <value>a set element</value> 
    <ref bean="otherBean"/> 
    <ref bean="anotherBean"/> 
</set>

</property>

<property name="test2"> 

            <props> 
                <prop key="someProkey1"> 
                    someProValue1 
                </prop> 
                <prop key="someProkey2"> 
                    someProValue2 
                </prop> 
            </props> 
        </property>
    </bean> 
</beans>

 

可以配置的项目有:
1. Bean属性值及依赖关系(对其他Bean的引用)
2. Bean创建模式(是否Singleton模式,即是否只针对指定类维持全局唯一的实例)
3. Bean初始化和销毁方法
4. Bean的依赖关系
下面是一个较为完整的Bean配置示例:

<beans>
<description>Spring Bean Configuration Sample</description>
<bean
id="TheAction" class="net.xiaxin.spring.qs.UpperAction" singleton="true" init-method="init" destroy-method="cleanup" depends-on="ActionManager"
>
<property name="message">
<value>HeLLo</value> 
</property>
<property name="desc">
<null/>
</property>
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/sample</value>
</property>
</bean>
</beans>

 ⑴

 

 

 

2管理bean
beans包提供了以编程的方式管理和操控bean的基本功能,而context包下的ApplicationContext以一种更加面向框架的方式增强了BeanFactory的功能。

1> BeanWrapper  

1> BeanFactory 

2> ApplicationContext(推荐使用的方式)
由于ApplicationContext包括了BeanFactory所有的功能,所以通常建议优先采用ApplicationContext

ApplicationContext actx2= new FileSystemXmlApplicationContext("WebRoot\\WEB-INF\\applicationContext.xml");

 

或者将applicationContext.xml放在src

ApplicationContext actx3= new ClassPathXmlApplicationContext("applicationContext.xml");

 id
Java Bean在BeanFactory中的唯一标识,代码中通过BeanFactory获取
JavaBean实例时需以此作为索引名称。
 class
Java Bean 类名
 singleton
指定此Java Bean是否采用单例(Singleton)模式,如果设为“true”,则在
BeanFactory作用范围内,只维护此Java Bean的一个实例,代码通过BeanFactory
获得此Java Bean实例的引用。反之,如果设为“false”,则通过BeanFactory获取
Java Bean实例时,BeanFactory每次都将创建一个新的实例返回。
 init-method
初始化方法,此方法将在BeanFactory创建JavaBean实例之后,在向应用层返回引
用之前执行。一般用于一些资源的初始化工作。
 destroy-method
销毁方法。此方法将在BeanFactory销毁的时候执行,一般用于资源释放。
 depends-on
Bean依赖关系。一般情况下无需设定。Spring会根据情况组织各个依赖关系的构建工作(这里
示例中的depends-on属性非必须)。
只有某些特殊情况下,如JavaBean中的某些静态变量需要进行初始化(这是一种Bad
Smell,应该在设计上应该避免)。通过depends-on指定其依赖关系可保证在此Bean
载之前,首先对depends-on所指定的资源进行加载。
 <value>
通过<value/>节点可指定属性值。BeanFactory将自动根据Java Bean对应的属性
类型加以匹配。
下面的”desc”属性提供了一个null值的设定示例。注意<value></value>代表一
个空字符串,如果需要将属性值设定为null,必须使用<null/>节点。
 <ref>
指定了属性对BeanFactory中其他Bean的引用关系。示例中,TheActiondataSource
性引用了iddataSourceBeanBeanFactory将在运行期创建dataSource bean实例,并将其
引用传入TheAction BeandataSource属性。
下面的代码演示了如何通过BeanFactory获取Bean实例:
InputStream is = new FileInputStream("bean.xml");
XmlBeanFactory factory = new XmlBeanFactory(is);
Action action = (Action) factory.getBean("TheAction");
此时我们获得的Action实例,由BeanFactory进行加载,并根据配置文件进行了初始化和属性设定。
联合上面关于BeanWrapper的内容,我们可以看到,BeanWrapper实现了针对单个Bean的属性设
定操作。而BeanFactory则是针对多个Bean的管理容器,根据给定的配置文件,BeanFactory从中读取
类名、属性名/值,然后通过Reflection机制进行Bean加载和属性设定。

 

 

1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值