目录
1. Bean的配置
Bean的本质就是Java中的类,spring中的Bean其实就是对实体类的引用,用来生产Java类对象,从而实现生产和管理Bean。如果把spring看作一个大型工厂,spring容器中的Bean就是工厂中的产品。使用这个工厂生产和管理Bean,就需要在配置文件中告诉它需要哪些Bean,以及需要使用何种方式将这些Bean装配到一起。
spring容器支持两种格式的配置文件:
- Properties文件
- XML文件(最常用)
XML配置文件的根元素是<bean>,<bean>中包含了多个<bean>子元素,每一个<bean>子元素定义了一个Bean,并描述了该Bean如何被装配到spring容器中。
属性或子元素名称 | 描述 |
id | 是一个Bean的唯一标识符,spring容器对Bean的配置、管理都通过该属性来完成。 |
name | spring容器同样可以通过此属性对容器中的Bean进行配置和管理,name属性中可以为Bean指定多个名称,每个名称之间用逗号","或分号";"隔开。 |
class | 该属性制定了Bean的具体实现类,它必须是一个完整的类名,使用类的全限定名。 |
scope | 用来设定Bean实例的作用域,其属性值有:singleton(单例)、prototype(原型)、request、session、global Session、application和websocket。默认值为singleton |
…… | …… |
2. Bean的实例化
在面向对象的程序中,想要使用某个对象,就需要先实例化这个对象。同样在spring中,要想使用容器中的Bean,也需要实例化Bean。实例化Bean有三种方式,分别为构造器实例化、静态工厂方式实例化和实例工厂方式实例化;其中最常用的是构造器实例化。
2.1 构造器实例化
构造器实例化是指spring容器通过Bean对应的类中默认的构造函数来实例化Bean。
示例
- 在eclipse中,创建一个名为chapter02的Web项目,将Spring的4个基础包以及commons-logging的jar包复制到lib目录中,并发布到类路径下;(改变默认环境为1.8,保存配置环境方便使用)
- 创建类名为Bean1的Java类,包名为com.itheima.instance.contructor;
- 创建spring配置文件beans1.xml,并配置Bean1实体类Bean;
<bean id="bean1" class="com.itheima.instance.contructor.Bean1"></bean>
- 编写测试类InstranceTest1,测试程序;
public class InstanceTest1 {
private static BeanFactory applicationConetxt;
public static void main(String[] args) {
//定义配置文件路径
String xmlPath="com/itheima/instance/contructor/beans1.xml";
//ApplicationContext在加载配置文件是,对Bean进行实例化
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xmlPath);
Bean1 bean=(Bean1) applicationContext.getBean("bean1");
//输出为对象的地址
System.out.println(bean);
}
}
2.2 静态工厂方式实例化
静态工厂是实例化Bean的另一种方式。该方式要求自己创建一个静态工厂的方法来创建Eban实例。
示例
- 创建类名为Bean2的Java类,包名为com.itheima.instance.static_factory;
- 创建一个Java工厂类,在类中使用静态方法获取Bean2实例;
public class MyBean2Factory {
//工厂中要有静态方法
public static Bean2 createBean() {
return new Bean2();
}
}
- 创建spring配置文件beans2.xml,并配置工厂类Bean;
<bean id="bean2" class="com.itheima.instance.static_factory.MyBean2Factory" factory-method="createBean"/>
- 编写测试类,测试程序;
public class InstanceTest2 {
public static void main(String[] args) {
//定义配置文件路径
String xmlPath="com/itheima/instance/static_factory/beans2.xml";
//ApplicationContext在加载配置文件,对Bean进行实例化
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xmlPath);
//获取到的是Bean2的实例
System.out.println(applicationContext.getBean("bean2"));
}
}
2.3 实例工厂方式实例化
实例工厂是采用直接创建Bean实例的放是,在配置文件中,通过factory-bean属性配置一个实例工厂,然后使用factory-method属性确定使用工厂中的哪个方法。
示例
- 创建类名为Bean3的Java类,包名为com.itheima.instance.factory;
- 创建一个Java工厂类,在类中使用非静态方法获取Bean3实例;
public class MyBean3Factory {
public MyBean3Factory(){
System.out.println("bean3工厂实例化中");
}
public Bean3 createBean() {
return new Bean3();
}
}
- 创建spring配置文件beans3.xml,并配置工厂类Bean
<!-- 配置工厂 -->
<bean id="myBean3Factory" class="com.itheima.instance.factory.MyBean3Factory"/>
<!-- 使用factory-bean属性指向配置的实例工厂 ,使用factory-method属性确定使用工厂中的哪个方法-->
<bean id="bean3" factory-bean="myBean2Faactory" factory-method="createBean"></bean>
- 编写测试类,测试程序;
public class InstanceTest3 {
public static void main(String[] args) {
//指定配置文件路径
String xmlPath="com/itheima/instance/factory/beans3.xml";
//ApplicationContext在加载配置文件时,对Bean进行实例化
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean3"));
}
}