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();
}
}
运行结果如下
静态工厂创建
创建一个静态工厂,返回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);
}
}
运行结果如下
实例工厂创建
实例工厂来创建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);
}
}
运行结果如下:
以上就是bean实例化的三种方式,最常用的是第一种。
上一篇: gradle排除jar依赖
下一篇: bean实例化的三种方法