实例化Bean对象的三种方式

一、实例化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();
}

总之,我们用得最多的是第一种,默认无参数构造方法。

猜你喜欢

转载自blog.csdn.net/weixin_44001568/article/details/105750982