下面我将为你详细讲解 Spring 中实例化 bean 的四种方式。
方式一:使用构造器实例化bean
说明:
在 Spring 容器初始化时,重新创建并实例化一个新的对象,该对象的构造函数会被调用,其参数值来自于<constructor-arg>
或者 spring:arg
传入的值。
示例1:
这是一个通过构造器实例化bean的简单示例,代码如下:
<bean id="myBean" class="com.example.MyBean">
<constructor-arg value="Hello World"/>
</bean>
其中 id 为 myBean 的 bean 类型为 com.example.MyBean,实例化时传入了字符串 "Hello World"。
示例2:
这是一个通过构造器实例化bean的实际应用,代码如下:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Spring配置如下:
<bean id="person" class="com.example.Person">
<constructor-arg value="zhangsan"/>
<constructor-arg value="20"/>
</bean>
其中 id 为 person 的 bean 类型为 com.example.Person,实例化时传入了 "zhangsan" 和 20 两个参数,即实例出了一个姓名为“zhangsan”,年龄为20的 Person 对象。
方式二:使用静态工厂方法实例化bean
说明:
使用静态工厂方法在Spring容器中实例化bean,此方法即一个没有接受任何参数的静态方法。
示例1:
这是一个通过静态工厂方法实例化bean的简单示例,代码如下:
<bean id="myBean" class="com.example.MyBean" factory-method="createMyBean"/>
上述代码中,id 为 myBean 的 bean 类型为 com.example.MyBean,实例化时使用了静态方法 createMyBean() 进行实例化。
静态方法代码如下:
public class MyBean {
private String message;
public MyBean(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public static MyBean createMyBean() {
return new MyBean("Hello World");
}
}
上述代码中,createMyBean() 方法用来实例化 MyBean 对象,此时 MyBean 的实例化方式与构造器实例化方式不同,在这里使用了静态方法。
示例2:
这是一个通过静态工厂方法实例化bean的实际应用,代码如下:
public class CarFactory {
private static Car createCar(String carType, String carColor) {
Car car = new Car(carType);
car.setColor(carColor);
return car;
}
}
Spring配置如下:
<bean id="car" class="com.example.CarFactory" factory-method="createCar">
<constructor-arg value="compact"/>
<constructor-arg value="blue"/>
</bean>
其中 id 为 car 的 bean 类型为 com.example.CarFactory,实例化时使用了静态方法 createCar() 进行实例化。
方式三:使用实例工厂方法实例化bean
说明:
使用实例工厂方法在Spring容器中实例化bean,此方法是一个接受任何数量参数的非静态方法。
示例1:
这是一个通过实例工厂方法实例化bean的简单示例,代码如下:
实例工厂代码:
public class MyBeanFactory {
public MyBean createMyBean(String message) {
return new MyBean(message);
}
}
Spring配置如下:
<bean id="myBeanFactory" class="com.example.MyBeanFactory"/>
<bean id="myBean" factory-bean="myBeanFactory" factory-method="createMyBean">
<constructor-arg value="Hello World"/>
</bean>
其中 id 为 myBean 的 bean 类型为 com.example.MyBean,使用了 createMyBean() 方法进行实例化。
示例2:
这是一个通过实例工厂方法实例化bean的实际应用,代码如下:
实例工厂代码:
public class CarFactory {
public Car createCar(String carType, String carColor) {
Car car = new Car(carType);
car.setColor(carColor);
return car;
}
}
Spring配置如下:
<bean id="carFactory" class="com.example.CarFactory"/>
<bean id="car" factory-bean="carFactory" factory-method="createCar">
<constructor-arg value="compact"/>
<constructor-arg value="blue"/>
</bean>
其中 id 为 car 的 bean 类型为 com.example.CarFactory,实例化时使用了 createCar() 方法进行实例化。
方式四:使用FactoryBean实例化bean
说明:
FactoryBean 是一个接口,通过实现该接口并定义 getObject() 方法来创建特定类型的 bean,getObject() 方法返回的是该特定类型的实例。
示例1:
这是一个通过FactoryBean实例化bean的简单示例,代码如下:
public class MyBeanFactoryBean implements FactoryBean<MyBean> {
private String message;
public MyBean getObject() throws Exception {
return new MyBean(message);
}
public Class<?> getObjectType() {
return MyBean.class;
}
public boolean isSingleton() {
return true;
}
public void setMessage(String message) {
this.message = message;
}
}
Spring配置如下:
<bean id="myBeanFactoryBean" class="com.example.MyBeanFactoryBean">
<property name="message" value="Hello World"/>
</bean>
<bean id="myBean" factory-bean="myBeanFactoryBean" factory-method="getObject"/>
其中 id 为 myBean 的 bean 类型为 com.example.MyBean,使用了 MyBeanFactoryBean 实现的 getObject() 方法进行实例化。
示例2:
这是一个通过FactoryBean实例化bean的实际应用,代码如下:
public class CarFactoryBean implements FactoryBean<Car> {
private String carType;
private String carColor;
public Car getObject() throws Exception {
Car car = new Car(carType);
car.setColor(carColor);
return car;
}
public Class<?> getObjectType() {
return Car.class;
}
public boolean isSingleton() {
return true;
}
public void setCarType(String carType) {
this.carType = carType;
}
public void setCarColor(String carColor) {
this.carColor = carColor;
}
}
Spring配置如下:
<bean id="carFactoryBean" class="com.example.CarFactoryBean">
<property name="carType" value="compact"/>
<property name="carColor" value="blue"/>
</bean>
<bean id="car" factory-bean="carFactoryBean" factory-method="getObject"/>
其中 id 为 car 的 bean 类型为 com.example.Car,使用了 CarFactoryBean 实现的 getObject() 方法进行实例化。
以上就是 Spring 中实例化 bean 的四种方式的详细攻略了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring中实例化bean的四种方式详解 - Python技术站