通过全类名配置 最常用
<bean id="hello" class="pojo.HelloWorld">
<property name="name" value="你好 Spring"></property>
</bean>
工厂方法配置bean
静态工厂方 :使用bean标签中的factory-method="方法名"属性 调用工厂静态方法方法 方法参数使用constructor-arg子节点传入
java静态工厂类:
public class StaticFactory {
private static Map<String, Car> map=new HashMap<>();
static {
Car baoma=new Car();
baoma.setBrand("宝马");
baoma.setPrice(1000000);
baoma.setPerimeter(80);
map.put("baoma", baoma);
Car benchi=new Car();
benchi.setBrand("奔驰");
benchi.setPrice(8500000);
benchi.setPerimeter(1000);
map.put("benci", benchi);
}
public static Car getCar(String name) {
return map.get(name);
}
}
配置:
<!-- 静态工厂方法 不是配置工厂 -->
<!-- 使用factory-method="方法名" 调用工厂静态方法方法 方法参数使用constructor-arg子节点传入 -->
<bean id="baoma" class="chen.StaticFactory" factory-method="getCar">
<constructor-arg value="baoma"></constructor-arg>
</bean>
实例工厂方法 先要配置工厂的bean应为要先实例化工厂
java工厂类:
public class PojoFactory {
private Map<String, Car> map=null;
public PojoFactory() {
map=new HashMap<>();
Car baoma=new Car();
baoma.setBrand("宝马");
baoma.setPrice(1000000);
baoma.setPerimeter(80);
map.put("baoma", baoma);
Car benchi=new Car();
benchi.setBrand("奔驰");
benchi.setPrice(8500000);
benchi.setPerimeter(1000);
map.put("benci", benchi);
}
public Car getCar(String name) {
return map.get(name);
}
}
配置:
<!-- 实例工厂方法 -->
<!-- 配置工厂的实例 -->
<bean id="carFactory" class="chen.PojoFactory"></bean>
<!-- 通过实例工厂配置bean -->
<!-- 使用factory-bean指定工厂bean factory-method指定工厂中的方法 constructor-arg子节点传入工厂参数 -->
<bean id="benci" factory-bean="carFactory" factory-method="getCar">
<constructor-arg value="benci"></constructor-arg>
</bean>
- 使用factory-bean指定工厂bean factory-method指定工厂中的方法 constructor-arg子节点传入工厂参数
FactoryBean配置bean
1实现 FactoryBean<T>
public class MyFactoryBean implements FactoryBean<Car> {
private String brand;
@Override
public Car getObject() throws Exception {//返回bean对象
Car car=new Car();
car.setBrand(brand);
car.setPrice(1000000);
car.setPerimeter(50);
return car;
}
@Override
public Class<?> getObjectType() {//bean类型
return Car.class;
}
@Override
public boolean isSingleton() {//是否是单利
return false;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}
- getObject()方法 返回bean对象
- getObjectType()方法 bean类型
- isSingleton()方法 是否是单利
2 配置
<bean id="car" class="chen.MyFactoryBean">
<property name="brand" value="宝马"></property>
</bean>
- class:指向FactoryBean的全类名 property子标签:配置的是FactoryBean的属性
但返回的是我们需要的bean实例