Spring几种不同方式配置Bean

配置文件(resources/config/initBean.xml)

Spring IoC容器如何实例化Bean呢?传统应用程序可以通过new和反射方式进行实例化Bean。而Spring IoC容器则需要根据Bean定义里的配置元数据使用反射机制来创建Bean。在Spring IoC容器中根据Bean定义创建Bean主要有以下几种方式:

一、使用无参构造器实例化Bean

使用此种方式,class属性指定的类必须有无参构造器

initBean.xml中的定义:

<bean name="bean" class="com.pyy.Bean"/>  

二、使用有参数的构造器实例化Bean

Bean.java中的定义:

package com.pyy;   
  public class Bean {  
        private String message;  
    	public Bean() {  
                  this.message = "Hello World!";  
           }  
        public Bean(String message) {  
                  this.message = message;  
           }  
          
         public void sayHello() {  
                  System.out.println(message);  
           }  
}  


initBean.xml中的定义:

<!--使用默认构造参数-->  
<bean name="bean1" class="cn.pyy.Bean">  
    <!--使用有参数构造参数-->  
   
<bean name="bean2" class="cn.pyy.Bean">  
<!-- 指定构造器参数 -->  
    <constructor-arg index="0" value="Hello Spring!"/>  
</bean> 
配置完了,下面进行测试

@Test  
public void testInitBeanByConstructor() {  
       //使用构造器  
     BeanFactory beanFactory =  
new ClassPathXmlApplicationContext("config/initBean.xml");  
       Bean bean1 = beanFactory.getBean("bean1", Bean.class);  
       bean1.sayHello();  
       Bean bean2 = beanFactory.getBean("bean2", Bean .class);  
       bean2.sayHello();  
} 

三、使用静态工厂实例化Bean

使用这种方式除了指定必须的class属性,还要指定factory-method属性来指定实例化Bean的方法,而且使用静态工厂方法也允许指定方法参数,spring IoC容器将调用此属性指定的方法来获取Bean,配置如下所示:


public class BeanStaticFactory {  
    //工厂方法  
       public static Bean newInstance(String message) {  
              //返回需要的Bean实例  
           return new Bean(message);  
	}  
}


1.静态工厂类


2.initBean.xml中的配置

<!-- 使用静态工厂方法 -->  
<bean id="bean3" class="com.pyy.BeanStaticFactory" factory-method="newInstance">  
     <constructor-arg index="0" value="Hello Spring!"/>  
</bean>  

3.编写 测试代码
@Test  
public void testInitBeanByStaticFactory() {  
       //使用静态工厂方法  
       BeanFactory beanFactory =  
new ClassPathXmlApplicationContext("config/initBean.xml");  
        Bean bean3 = beanFactory.getBean("bean3", Bean.class);  
       bean3.sayHello();  
}  

四、使用实例工厂实例化Bean

使用这种方式不能指定class属性,此时必须使用factory-bean属性来指定工厂Bean,factory-method属性指定实例化Bean的方法,而且使用实例工厂方法允许指定方法参数,方式和使用构造器方式一样,配置如下:

1.实例工厂类

 public class BeanStaticFactory {  
    //工厂方法  
       public static Bean newInstance(String message) {  
              //返回需要的Bean实例  
           return new Bean(message);  
	}  
}


2.initBean.xml中的配置

<!—1、定义实例工厂Bean -->  
<bean id="beanInstanceFactory"  class="com.pyy.BeanInstanceFactory"/>  
<!—2、使用实例工厂Bean创建Bean -->  
<bean id="bean4"  factory-bean="beanInstanceFactory"  factory-method="newInstance">  
   <constructor-arg index="0" value="Hello Spring!"></constructor-arg>  
</bean>  


3.编写 测试代码
@Test  
public void testInitBeanByStaticFactory() {  
       //使用静态工厂方法  
       BeanFactory beanFactory =  
new ClassPathXmlApplicationContext("config/initBean.xml");  
        Bean bean4 = beanFactory.getBean("bean4", Bean.class);  
       bean4.sayHello();  
}  




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值