bean实例化的三种方法
这篇文章总结了bean实例化方法
Spring中bean实例方法有三种
- 使用构造方法实例化bean
- 使用静态工厂实例化bean
- 使用实例工厂实例化bean
下面分别介绍这三种实例化bean方法具体操作。
在介绍在三种创建bean方法前,我们先创建一个User类,我们通过创建User对象来了解这三种实例化bean方式。
package lzgsea.bean;
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
使用构造方法实例化bean
在Java中我没说使用构造方法创建bean,比较简单,直接使用new关键字就可以创建了,例如我们要创建User对象,代码如下
User user = new User();
System.out.println(user);
在Spring中我们如何实现上面的java代码?
我们需要在XML中配置User的bean,代码如下:
<bean id="user" class="lzgsea.bean.User"></bean>
在Java代码使用ApplicationContext获取user对象,代码如下:
ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) act.getBean("user");
System.out.println(user);
注意:这里使用的是无参构造方法创建bean,如果我们要使用有参的构造方法创建bean,首先我们要在User类中定义有参的构造方法,在XML使用constructor-arg配置bean的参数。
使用静态工厂方法创建bean
同样,我们先看看在java中是怎么通过静态工厂方法创建User对象。
package lzgsea.factory;
import lzgsea.bean.User;
public class BeanFactoryTest {
public static void main(String[] args) {
User user = BeanFactoryTest.createUser();
System.out.println(user);
}
public static User createUser() {
return new User();
}
}
上面代码,我们可以看到BeanFactoryTest工厂类中有一个静态工厂方法createUser,该方法用来生产User对象,上述代码我们用Spring如何来实现?
这里我们需要使用bean标签的factory-method属性,该属性表示bean的工程方法。
xml配置如下:
<bean id="user1" class="lzgsea.factory.BeanFactoryTest" factory-method="createUser"></bean>
使用静态工厂方法创建bean,xml配置中class属性指向的是工厂类的全路径,factory-method属性配置静态工厂方法。
在java中我们使用ApplicationContext获取user对象,代码如下:
ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) act.getBean("user1");
System.out.println(user);
使用实例工厂实例化bean
使用实例工厂实例化bean和使用静态工厂方法实例化bean有些类似,都是通过工厂类创建bean,不同在于使用实例工厂实例化bean,我们需要先实例化工厂类,通过工厂类对象调用方法创建我们需要的bean。他的java代码实现如下:
package lzgsea.factory;
import lzgsea.bean.User;
public class BeanFactory {
public static void main(String[] args) {
BeanFactory bf = new BeanFactory();
User user = bf.createUser();
System.out.println(user);
}
public User createUser() {
return new User();
}
}
上述这段代码在Spring中如何实现?
我们现在XML中配置BeanFactory,再通过factory-bean和factory-method属性配置User,factory-bean表示工厂类的bean。
<!-- 工厂类bean -->
<bean id="beanFactory" class="lzgsea.factory.BeanFactory"></bean>
<!-- 我们需要生产的bean -->
<bean id="user2" factory-bean="beanFactory" factory-method="createUser"></bean>
在java中我们使用ApplicationContext获取user对象,代码如下:
ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) act.getBean("user2");
System.out.println(user);
上一篇: Spring bean实例化三种方法
下一篇: Maven项目转换为Gradle项目