Spring实例化Bean的三种方式

来源:互联网 发布:网络语言黑洞什么意思 编辑:程序博客网 时间:2024/06/01 09:50

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

1、使用类构造器实例化

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

3、使用实例工厂实例化


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

一、使用类构造器实例化

这是Spring的xml配置文件:

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

这是PersonDaoBean.java文件

public class PersonDaoBean implements PersonDao {@Overridepublic 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 {@Overridepublic 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(){  //注意,这里相对于静态工厂少了个staticreturn new PersonServiceBean();}}
PersonServiceBean.java类和上边的静态工厂方法介绍中的相同

public class PersonServiceBean implements PersonService {@Overridepublic 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();}



0 0
原创粉丝点击