一、实例化Bean对象的三种方式
配置方法前先创建一个接口和接口实现类
接口
public interface UserService {
public void hello();
}
接口实现类
public class UserServiceImpl implements UserService{
public UserServiceImpl(){
System.out.println("UserServiceImpl对象被创建...");
}
public void hello() {
System.out.println("Hello IOC");
}
//初始化方法
public void init(){
System.out.println("对象创建完成,进行初始化操作!!");
}
//销毁方法
public void destory(){
System.out.println("销毁对象!!");
}
}
1、默认无参数构造方法(默认方式,基本上使用)
采用这种实例化方式要注意的是:要实例化的类中如果有构造器的话,一定要有一个无参的构造器。
applicationContext 配置
<bean id="us" class="cn.tx.service.UserServiceImpl" />
2、静态工厂方法
静态工厂方法的优点:编写很多业务逻辑、权限校验等。
这种方式进行实例化就要具备两个条件:
(一)、要有工厂类及其工厂方法;
(二)、工厂方法是静态的。
applicationContext 配置
<bean id="us" class="cn.tx.demo1.StaticFacetory" factory-method="createUs" />
静态工厂方法代码:
/*静态工厂方法*/
public class StaticFacetory{
//静态工厂方法
public static UserService createUs(){
System.out.println("通过静态工厂方法创建UserServiceImpl对象...");
//静态工厂方法的优点:编写很多业务逻辑、权限校验等。
return new UserServiceImpl();
}
}
3、动态工厂方法
使用动态工厂方法不需要是静态的,但是在spring的配置文件中需要配置更多的内容,这里需要配置两个bean,第一个bean使用的构造器方法实例化工厂类,第二个bean中的id是实例化对象的名称,factory-bean对应的被实例化的工厂类的对象名称,也就是第一个bean的id,factory-method是非静态工厂方法。
applicationContext 配置
<bean id="dfactory" class="cn.tx.demo1.DFactory"/>
<bean id="us" factory-bean="dfactory" factory-method="createUs"/>
动态工厂方法代码:
/*动态工厂方法*/
public class DFactory {
public UserService createUs(){
System.out.println("动态工厂....");
return new UserServiceImpl();
}
}
测试调用,三种方式的调用方式一样:
@Test
public void run1(){
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us= (UserService) ac.getBean("us");
us.hello();
}
总之,我们用得最多的是第一种,默认无参数构造方法。