Spring Framework 4.0 官方文档核心内容整理之 --- XML方式配置Bean

Spring Framework 4.0 官方文档核心内容整理之 --- XML方式配置Bean

Spring框架的核心部分就是Ioc容器,而Ioc控制的就是各种Bean,一个Spring项目的水平往往从其XML配置文件内容就能略知一二,很多项目,往往是外包公司的项目,配置文件往往是乱七八糟,抱着能跑就行,不报错就行的态度去写,然后在项目中后期发现各种缺失又去一通乱补,其结果就是,整个文档可读性极差,毫无章法。这也不能怪写这个XML的人,拿着苦逼程序员的工资干着架构师的工作必然是这个结果。为了程序员的幸福,我认为有必要来一套简单快速的官方文档核心配置归纳整理和解释,好让苦逼猿们在工作中能正确快速的提高自身和项目的整体水平。



<bean   class="这个Bean的类"  

            name/id="Bean在容器里面的唯一名称" 

            scope="Bean的生命周期,详细解释看下面"  

            autowiring-mode="这个Bean的properties的自动注入方式,详细解释看下面"  

            lazy-init="是否为懒加载,详细解释看下面"

            init-method="容器初始化该Bean后的回调方法,详细解释看下面"  

            destroy-method = "容器在销毁Bean后的回调方法,详细解释看下面"    

            abstract="是否为抽象Bean,主要用来统一XML配置文档里面的很多Bean的属性配置,与Java的Abstract Class无任何关系"

            parent="父Bean的名称,会继承父Bean的属性,也是只在配置文档中有效,与Java的Class无任何关系"

            factory-method="工厂方法的名字"

            factory-bean="工厂Bean的名字"

            depends-on ="依赖Bean的名字,Spring保证会在初始化这个Bean前先初始化被依赖的Beans,这个属性不会被子Bean继承,子Bean要重新写自己的depends-on"      

            autowire-candidate = "是否为自动注入的候选,一般当其他Bean设置autowiring-mode属性为自动搜寻时可以避免或允许该Bean被列入匹配列表"    

            primary = "是否将该Bean在其他Bean的自动注入候选人中设为首选" 

>

            

            // Constructor-arg方式给属性赋值写法一

            <constructor-arg type="int" value="7500000"/>

            // Constructor-arg方式给属性赋值写法二

            <constructor-arg name="years" value="7500000"/>

            // Constructor-arg方式给属性赋值写法三

            <constructor-arg index="0" value="7500000"/>

           

            // Properties方式给属性赋值写法一

            <property name="beanOne">

                 <ref bean="另外一个Bean的名字"/>

            </property>

            // Properties方式给属性赋值写法二

            <property name="beanOne" ref="另外一个Bean的名字"/>

            // Properties方式给属性赋值写法三

            <property name="integerProperty" value="1"/>

            

       

</bean>



Spring Bean 的XML描述文档有下列属性 
      

class

(Bean的Class)

声明用于生成Bean的Class。

name 

(Bean的名称)

Bean 在该环境的唯一名称。 可以用 id 或 name 来声明

scope

(Bean的生命周期)

Bean 的模式,Spring 官方文档描述如下

单例模式(singleton):

  默认的Bean模式,注意区别是Spring的Bean是每个容器允许一个单例,而不是每个类加载器一个单例,所有需要被注入的Bean都会得到该Bean的一个引用。

原型模式 (prototype): 

  每一个将该Bean注入其他Bean中都会注入一个该Bean的新实例。Spring对原型模式的Bean会进行构造,编译和初始化,但是不会执行销毁回调方法,就算该Bean定义了销毁回调方法也不会被Spring执行,需要自己实现Bean Post Processor。

请求模式 (request): 

  该Bean在每一个Http请求时都会新生成一个只对应该请求的Bean。只有在该Web应用的上下文中有效。

会话模式 (session):

  该Bean在每一个Session的生命周期中存在。只有在该Web应用的上下文中有效。

全局会话模式 (global session) :

  该Bean在每一个全局Session的生命周期中存在。一般用在portlet里。

自定义模式 (custom):

  通过扩展或重写Spring预定义的Bean Scope。

constructor-arg

(参数注入方法一)

构造方式注入参数 , 可以按照类型或者序号或者名称来赋值

例如   

public class ExampleBean {
    
private int years;

private String ultimateAnswer;

public ExampleBean(int years, String ultimateAnswer) { 
this.years = years;
this.ultimateAnswer = ultimateAnswer;

} 
}
通过使用下面的几种方式 都能完成一样的事  

<bean id="exampleBean" class="examples.ExampleBean"> 
<constructor-arg type="int" value="7500000"/> 
<constructor-arg type="java.lang.String" value="42"/>
</bean>

         

<bean id="exampleBean" class="examples.ExampleBean"> 
<constructor-arg index="0" value="7500000"/> 
<constructor-arg index="1" value="42"/>
</bean>

<bean id="exampleBean" class="examples.ExampleBean"> 
<constructor-arg name="years" value="7500000"/>
<constructor-arg name="ultimateanswer" value="42"/>
</bean>

   

最后这个方式要修改下Class,添加如下注解

@ConstructorProperties({"years", "ultimateAnswer"})

properties(参数注入方法二)

Setter方式注入参数

public class ExampleBean
{
   private AnotherBean beanOne;
   private YetAnotherBean beanTwo; 
   private int i;

   public void setBeanOne(AnotherBean beanOne) 
   { 
      this.beanOne = beanOne;
   }

   public void setBeanTwo(YetAnotherBean beanTwo) 
   { 
      this.beanTwo = beanTwo;
   }

   public void setIntegerProperty(int i)
   {
      this.i = i;
   }
 
}
<bean id="exampleBean" class="examples.ExampleBean">
   
  // 写法1
  
  <property name="beanOne">
  <ref bean="anotherExampleBean"/>
  </property>
   
  // 写法2

  <property name="beanTwo" ref="yetAnotherBean"/> 

  // 写法3
  <property name="integerProperty" value="1"/>

</bean>

<bean id="anotherExampleBean" class="examples.AnotherBean"/> 

<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

autowiring mode 属性自动关联模式

(项目里最好就使用默认的No选项,或者直接不写,如果一定要用,可以在不需要被关联Bean里定义,autowire-candidate=false)

no (默认):

不可被自动关联,要关联这个Bean的属性只能用 ref 元素来配。不建议在大型应用中使用其他模式。


byName :

Spring会按照这个bean里的属性名字去找相应的Bean然后关联。


byType :

Spring会按照这个bean里的属性类型去找相应的Bean然后关联。如果没找到,这个属性就是Null,如果在文档里找到了多个同类型的Bean,则会报错。


constructor :

Spring会在其他Bean的constructor描述里找,如果找到多个,则会报错

lazy-initialization mode

(懒加载模式)

容器对Bean的初始化方式,如果不写,则默认为饥渴模式,

如果写<bean id="xxxxx" class="com.xxx" lazy-init="true"/> 则容器会在第一次需要这个Bean的时候才去初始化。

initialization method

(初始化后回调方法) 

<bean id="xxx" class="xxx.xxx" init-method="init"/>

Spring会在该Bean初始化完成后执行init方法

public class xxx {

public void init() {
// do some initialization work

} } 


destruction method

(销毁后回调方法 )

<bean id="xxx" class="xxx.xxx"  destroy-method="cleanup" />

Spring会在该Bean销毁后执行此方法

public class xxx {

public void cleanup() {

// do some destruction work (like releasing pooled connections) 

} }


转载于:https://my.oschina.net/liuyanpunk/blog/185401

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值