疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Spring实例化Bean的三种方式


 

 
在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();
}