在面向对象(OOP)的程序中,想要使用某个对象就要先实例化该对象。同样,在spring中,想要使用容器中的Bean。也需要先实例化。下面对三种实例化的方式进行总结。
构造器实例化
指的是Spring容器通过Bean对应类的默认无参构造方法来实例化Bean。这也是最为常用的一种方式。
- 在Eclipse(不会安装的可以评论。单独出一篇)中创建一个web项目,在项目的lib目录下加入Spring支持和依赖的JAR包(这里采用的是传统的开发,现在公司大都采用Maven进行JAR包的统一管理,会更加的方便和高效)
- 在项目的src目录下,创建一个包(名称随意。只是讲解知识点。不做统一要求)。在包里创建一个类
public class User {
public void add() {
System.out.println("add()---------");
}
}
3.在包下创建spring的配置文件。定义一个id为user,并通过class属性指定对应的实现类
<bean class="org.sang.User" id="user"/>
4.在包下创建测试类
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) context.getBean("user");
System.out.println(user);
5.控制台的输出结果
静态工厂实例化
与第一种相比,此时的Bean配置中的class属性所指的不再是Bean的实现类。而是静态工厂类,同时还需要实验factory-method来指定所创建的静态工厂的方法。
1:在项目中创建一个Bean类
public class User2 {
public void add() {
System.out.println("add2()---------");
}
}
2:创建一个工厂类,并创建一个静态方法
public class User2Factory {
public static User2 getInstance() {
return new User2();
}
}
3:创建配置文件
<bean id="user2" class="org.sang.User2Factory" factory-method="getInstance"/>
4:创建测试类
@Test
public void test2() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User2 user = (User2) context.getBean("user2");
user.add();
}
5:运行结果:
实例工厂实例化
小伙伴们看了静态工厂创建bean实例肯定都觉得很麻烦,事实上还有比静态工厂更麻烦的写法,那就是通过实例工厂来创建bean实例。实例工厂,顾名思义,就是我们工厂中的方法不是静态的。
1.创建一个Bean类
@Test
public void test3() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User3 user = (User3) context.getBean("user3");
user.add();
}
2.创建工厂类,创建一个非静态方法
public class User3Factory {
public User3 getUser3() {
return new User3();
}
}
3.编写spring的配置文件
<bean class="org.sang.User3Factory" id="user3Factory"/>
<bean id="user3" factory-bean="user3Factory" factory-method="getUser3"/>
4.创建测试类
@Test
public void test3() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User3 user = (User3) context.getBean("user3");
user.add();
}
5.运行结果