欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring bean实例化三种方法

程序员文章站 2022-05-22 20:29:16
...

普通构造方法创建

最多使用的一种创建方式,直接配置bean节点,如定义一个接口UserDao:

public interface UserDao {
    public void save();
}

再定义一个实现类

public class UserDaoImpl  implements UserDao {
    public void save(){
        System.out.println("save running...");
    }
 }

通过配置applicationContext.xml文件的bean节点获取实例

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>

最后创建一个测试类UserDaoDemo实现简单的测试:

public class UserDaoDemo {
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) app.getBean("userDao");
        userDao.save();
    }
}

运行结果如下Spring bean实例化三种方法

静态工厂创建

创建一个静态工厂,返回UserDao实例

public class StaticFactory {
    public static UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

Spring文件配置bean,factory-method属性,该属性指明该类中的静态工厂方法名为getUserDao

<bean id="userDao" class="com.itheima.factory.StaticFactory" factory-method="getUserDao"/>

测试代码如下

public class SpringTest {
    @Test
    public void test1(){
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao1 = (UserDao) app.getBean("userDao");
        System.out.println(userDao1);
    }
}

运行结果如下Spring bean实例化三种方法

实例工厂创建

实例工厂来创建bean实例。实例工厂,顾名思义,就是我们工厂中的方法不是静态的,更加麻烦。
实体类使用上面的创建的UserDao类
工厂方法如下

public class DynamicFactory {
    public  UserDao getUserDao(){
        return new UserDaoImpl();
    }
}
<bean id="factory" class="com.itheima.factory.DynamicFactory"/>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"/>

第一个bean用来获取DynamicFactory的实例,第二个bean则根据DynamicFactory的实例,然后指定factory-method,通过getUserDao方法来获取UserDao的实例。
测试代码如下

public class SpringTest {
    @Test
    public void test1(){
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao1 = (UserDao) app.getBean("userDao");
        System.out.println(userDao1);
    }
}

运行结果如下:
Spring bean实例化三种方法

以上就是bean实例化的三种方式,最常用的是第一种。