Spring中bean的三种实例化方式的简单实例
2017-11-08 21:29
676 查看
Bean的配置方式有三种:通过全类名(反射)、通过工厂方法(静态工厂方法&实例工厂方法)、FactoryBean.
1.首先是通过全类名来配置,这种方式最为简单也很常用,这里就不创建实例了:
在spring配置文件中配置如下:
2.通过静态工厂来配置bean实例:
首先建立静态工厂:
下面是测试类:
最后结果输出:Car[name=baoma, price=400000.0]
3.通过实例工厂方法来配置bean简单实例:
首先创建实例工厂:
测试类:
输出结果:Car[name=baoma, price=400000.0]
4.通过FactoryBean来配置Bean的简单实例:
首先创建一个实现FactoryBean接口的类:
在spring的配置文件如下:
输出结果:Car[name=BMW, price=500000.0]
1.首先是通过全类名来配置,这种方式最为简单也很常用,这里就不创建实例了:
在spring配置文件中配置如下:
<!-- 配置bean: bean的全类名,通过反射的方式在容器创建Bean,所以要求Bean必须要有无参构造器 id:Bean的名称,在IOC容器中必须是唯一的,若ID没有指定,spring将权限定性类名作为bean的名字 id可以指定多个名字,名字之间可以用逗号、分号、或空格分隔 --> <bean id="helloWord" class="com.spring.po.HelloWord"> <property name="name" value="Spring"></property> </bean>
2.通过静态工厂来配置bean实例:
首先建立静态工厂:
import java.util.HashMap; import java.util.Map; import com.spring.po.Car; /** * 静态工厂方法:直接调用某一个类的静态方法就可以返回Bean实例 * */ public class StaticFactory { private static Map<String, Car> cars = new HashMap<>(); //初始化模拟数据 static { cars.put("audi", new Car("audi",300000.0)); cars.put("baoma", new Car("baoma",400000.0)); } //静态工厂方法 public static Car getCar(String name) { return cars.get(name); } }在spring配置文件中进行如下配置:
<!-- 通过静态工厂方法来配置Bean,不是配置静态工厂实例,而是配置bean实例 --> <bean id="car1" class="com.spring.factory.StaticFactory" factory-method="getCar"> <constructor-arg value="baoma"></constructor-arg> </bean>在静态工厂中,通过factory-method来获取返回的bean,通过constructor-arg标签来传递参数,获取对应的bean对象
下面是测试类:
public class FactoryTest { public static void main(String[] args) { //获取spring IOC容器 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Car car1 = (Car) context.getBean("car1"); System.out.println(car1); } }
最后结果输出:Car[name=baoma, price=400000.0]
3.通过实例工厂方法来配置bean简单实例:
首先创建实例工厂:
import java.util.HashMap; import java.util.Map; import com.spring.po.Car; /** * 实例工厂的方法:需先创建实例工厂本身,再调用工厂的方法返回bean实例 * */ public class InstanceFactory { private Map<String, Car> cars = null; public InstanceFactory() { //通过构造器来初始化模拟数据 cars = new HashMap<>(); cars.put("audi", new Car("audi",300000.0)); cars.put("baoma", new Car("baoma",400000.0)); } public Car getCar(String name) { return cars.get(name); } }在spring配置文件的配置如下:
<!-- 实例工厂 --> <bean id="carFactory" class="com.spring.factory.InstanceFactory"></bean> <!-- 通过实例工厂来配置bean --> <bean id="car2" factory-bean="carFactory" factory-method="getCar"> <constructor-arg value="baoma"></constructor-arg> </bean>
测试类:
public class FactoryTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Car car2 = (Car) context.getBean("car2"); System.out.println(car2); } }
输出结果:Car[name=baoma, price=400000.0]
4.通过FactoryBean来配置Bean的简单实例:
首先创建一个实现FactoryBean接口的类:
package com.spring.factoryBean; import org.springframework.beans.factory.FactoryBean; import com.spring.po.Car; public class FactoryCarBean implements FactoryBean<Car>{ private String name; public void setName(String name) { this.name = name; } /** * 返回bean */ @Override public Car getObject() throws Exception { return new Car(name, 500000.0); } /** * 返回的类型 */ @Override public Class<?> getObjectType() { return Car.class; } /** * 是否单例 */ @Override public boolean isSingleton() { return true; } }
在spring的配置文件如下:
<!-- 通过FactoryBean来配置Bean, class直接指向实现FactoryBean的类--> <bean id="car3" class="com.spring.factoryBean.FactoryCarBean"> <property name="name" value="BMW"></property> </bean>测试类:
public class FactoryBeanTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Car car = (Car) context.getBean("car3"); System.out.println(car); } }
输出结果:Car[name=BMW, price=500000.0]
相关文章推荐
- 创建Bean的三种方式 在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法。实际上,Sprin
- Spring中Bean的基于xml的三种实例化方式
- Spring2.5学习1.3_三种实例化bean的方式
- Spring学习笔记(二)Spring的三种实例化Bean的方式
- 一步一步深入spring(2)-三种方式来实例化bean
- (2)Spring的三种实例 bean 的方式 以及 Spring中bean的作用域。 以及 bean的生命周期
- spring bean实例化的三种方式
- Spring三种实例化Bean的方式
- Spring 三种实例化Bean的方式
- Spring实例化Bean的三种方式及Bean的类型(activiti实战)
- (转)Spring的三种实例化Bean的方式
- Spring实例化Bean的三种方式及Bean的类型
- Spring实例化Bean的三种方式
- spring三种实例化bean的方式
- Spring三种实例化Bean的方式
- Spring三种实例化Bean的方式
- Spring的三种实例化Bean的方式
- spring基础----->实例化bean的三种方式
- spring的三种实例化bean的方式
- spring中三种实例化bean的方式