Spring实例化Bean的三种方式

本文详细介绍了Spring中Bean的三种实例化方式:使用类构造器实例化、使用静态工厂方法实例化和使用实例工厂方法实例化。通过具体代码示例展示了每种方式的实现过程及运行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Spring中有三种创建Bean的方式:

1、使用类构造器实例化

2、使用静态工厂方法实例化

3、使用实例工厂实例化


下边介绍下这三种实例化的步骤:

一、使用类构造器实例化

这是Spring的xml配置文件:

<bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean"></bean>

这是PersonDaoBean.java文件

public class PersonDaoBean implements PersonDao {
	@Override
	public void add(){
		System.out.println("执行PersonDaoBean中的add()方法");
	}

}
这是SpringTest.java文件:

public void instanceSpring() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		PersonDao personDao = (PersonDao)ctx.getBean("personDao");
		personDao.add();
	
}

程序的运行过程:

运行SpringTest.java文件,

首先通过实用的Bean工厂ApplicationContext获得beans.xml的路径,对单例的Bean进行实例化(关于Bean在何时实例化在随后的博文里边有)。

然后通过ctx.getBean("personDao")得到personDao这个Bean的实例对象(Object),由于得到的类型是Object的,所以需要转换下类型。

最后,通过PersonDao这个接口中的add()方法,打印出文字。

二、使用静态工厂实例化

首先是Beans.xml文件

<bean id="personService" class="cn.itcast.service.impl.PersonServiceBeanFactory" factory-method="createPersonServiceBean">
</bean>
然后是PersonServiceBeanFactory.java类

public class PersonServiceBeanFactory {
	public static PersonServiceBean createPersonServiceBean(){
		return new PersonServiceBean();
	}	
}
还有就是PersonServiceBean.java类

public class PersonServiceBean implements PersonService {	
	@Override
	public void save(){
		System.out.println("我是save()方法");
	}
	
}
再有就是测试类SpringTest.java类

public void instanceSpring() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		PersonService personService = (PersonService)ctx.getBean("personService");
		
		personService.save();
	
	}
我们来看一下SpringTest.java程序的运行过程

首先得到ApplicationContext对象,这个不多说。

然后,通过getBean()方法得到id="personService"的Bean。在这个过程中,会调用静态工厂PersonServiceBeanFactory的createPersonServiceBean方法,实例化出来一个PersonServiceBean类对象。

最后通过personService这个PersonService类对象调用save()方法。

三、使用实例工厂方法实例化Bean

首先我们看下配置文件beans.xml

<bean id="personServiceFactory" class="cn.itcast.service.impl.PersonServiceBeanFactory"></bean>
<bean id="personService" factory-bean="personServiceFactory" factory-method="createPersonServiceBean"></bean>
然后是PersonServiceBeanFactory.java文件

public class PersonServiceBeanFactory {
	public PersonServiceBean createPersonServiceBean(){  //注意,这里相对于静态工厂少了个static
		return new PersonServiceBean();
	}	
}
PersonServiceBean.java类和上边的静态工厂方法介绍中的相同

public class PersonServiceBean implements PersonService {	
	@Override
	public void save(){
		System.out.println("我是save()方法");
	}
	
}
然后是测试类SpringTest.java

public void instanceSpring() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		PersonService personService = (PersonService)ctx.getBean("personService");
		
		personService.save();
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值