2、IOC中Bean的配置
- 1、基于xml文件
- 2、通过工厂方法
1、通过调用静态工厂方法创建bean
public class StaticCarFactory{
private static Map<String,Car> cars=new HashMap<String,Car>();
static{
cats.put("audi",300000);
cars.put(:ford",400000);
}
//静态工厂方法
public static Car getCar(String name){
return cars.get(name);
}
}
配置文件:通过静态工厂方法来配置bean,不是配置静态工厂方法实例,而是配置bean实例
<!--factory-method:指向静态工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数-->
<bean id="car1 class="com.bean.StaticCarFactory"
factory-method="getCar">
<constructor-arg value="audi"></constructor>
</bean>
2、通过调用实例工厂方法创建bean
public class InstanceCarFactory(){
private Map<String,Car> cars=null;
public InstanceCarFactory(){
cars=new HashMap<String,Car>();
cats.put("audi",new Car("audi",300000));
cars.put("ford",new Car("ford",400000));
}
public Car getCar(String brand){
return cars.get(brand);
}
}
配置文件
<!--配置工厂实例-->
<bean id="carFactory" class="com.bean.InstanceCarFactory>
<!--通过实例工厂方法来配置bean-->
<bean id="car2" factory-bean="carFactory" factory-method="getCar">
<constructor-arg value="audi"></constructor>
</bean>
- 3、**FactoryBean方式配置bean
//自定义FactoryBean并实现FactoryBean接口
public CarFaotoryBean implement FactoryBean<Car>{
private String brand;
public void setBrand(String brand){
this.brand=brand;
}
@Override
public Car getObject() throws Exception{
return new Car("BMW",50000);
}
@Override
public Class<?> getObjectType(){
return Car.class;
}
@Override
public boolean isSingleton(){
return true
}
}
配置文件
<!--通过FactoryBean来配置bean实例
property:配置FactoryBean的属性,但实际返回的实例FactoryBean的getObject()方法返回的实例-->
<bean id="car" class="com.bean.CarFaotoryBean>
<property name="brand" value="BMW"></property>
</bean>
- 4、基于注解方式配置
首先,创建多个类并用不同的注解进行标识,将这些类放在同一包下(如:com.bean.annotation)在Spring配置文件中配置。
<!--可以通过resource-pattern指定扫描的资源-->
<context:componment-scan base-package="com.bean.annotation"></context:componment-scan>
配置完成后,在main方法中分别通过容器调用不同类中的方法进行执行。
-
通过注解自动完成bean之间的关联:当一个类的属性为另一个类对象是,在这个属性上添加以下注解可以让bean自动关联。
Paste_Image.png
Paste_Image.png
网友评论