Spring -- 关于Bean

一般我们在程序中使用的bean都是POJO,通过使用spring来管理这些Bean,我们把他们称之为“托管Bean”。通过初步学习IoC和DI我们了解到实例化Bean有以下几种方式:

1.构造方法生成

  要指定要在容器本身通过反复调用其构造函数直接创建bean的情况下构造的bean类,这与使用new运算符的Java代码相当。

这种实例化的实现,需要配置元数据,例如: 

	<bean id="XXXX" class="所在包.类名"></bean>

2.使用静态工厂方法进行实例化

  首先要搞清楚的是什么是静态工厂方法:就是写一个静态方法,专门用于创建,生产类的对象。每调用一次这个方法就会有新的对像产生。

   

举个栗子:(懒汉单例模型)

public class Myproperties extends Properties {
	private static Myproperties mp;
	//单例
	private Myproperties(){
		//这里写入业务代码
		System.out.println("Myproperties 的无参构造方法");
	}
	
	//懒汉单例模式,在被调用的时候才new
	public static Myproperties getInstance(){
		if(mp==null){
			mp = new Myproperties();
		}
		return mp;
	}
}

接着配置beans.xml:

<!-- 静态工厂方法创建bean -->
	<bean id="mp" class="所在包.Myproperties" factory-method="getInstance"/> <!--这里getInstance就是方法名-->

然后我们去测试类里看看效果:

 public void testApp(){
    	//实例化容器,spring要在自己创建的时候,就读取beans.xml并通过反射机制创建对象
       ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});      
       Myproperties mp = (Myproperties) context.getBean("mp");
       System.out.println(mp);
    }	
运行结果是这样的:{} 

3.通过实例工厂进行实例化

  首先要搞清楚什么是实例工厂方法,看这个名字就知道。首先要创建这个工厂类的对象,然后通过对象来调用实例化方法来创建。

举个栗子:

这里Apple.java基本类就没写出来了

public class AppleFactory {
	private static Apple apple ;	
	
	private AppleFactory(){
		
	}
	
	public Apple createAppleInstance(){
		apple = new Apple();
		return apple;
	}
}
看看beans.xml:

<!-- 实例工厂方法创建bean -->
  <bean id="appleFactory"  class="所在包名.AppleFactory"/>
    <bean id="apple" factory-bean="appleFactory" factory-method="createAppleInstance"/>
再瞧瞧测试:

 public void testApp6(){
       ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
       Apple apple = (Apple) context.getBean("apple");
       System.out.println(apple.getAid());
    }
运行结果:4437

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值