Spring 框架
1、框架的作用
通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象.
一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean.
调用getBean()方法,Spring返回的不是直接创建的Bean的实例,而是由工厂Bean创建的Bean实例.
一般在Spring中配置工厂Bean,有3种不同类型的工厂Bean的配置.
- 静态工厂:将其纳入Spring容器来管理,需要通过factory-method指定静态方法名称
- 实例工厂:创建具体Bean实例的是实例,不是静态方法配置文件需要配置两个bean:第一个Bean和普通的Bean没有区别,第二个bean定义如何通过工厂Bean获取Bean,需要指定工厂Bean的名称和方法名称
- 实现FactoryBean接口:实现了FactoryBean接口的Bean,不再被视为普通的Bean.Spring会自动检测.
2、框架的配置
1、依赖spring官方的jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
2、配置appConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--普通配置-->
<bean id="stu" class="bean.Student" init-method="init" destroy-method="destroy"/>
<!--静态工厂-->
<bean id="stuFac" class="bean.StudentFactory" factory-method="getStudent"/>
<!--实例工厂,然后通过工厂生产bean实例-->
<bean id="teaFac" name="factory" class="bean.TeacherFactory"/>
<bean id="tea" class="bean.TeacherFactory" factory-bean="factory" factory-method="getTeacher"/>
<!--类实现了FactoryBean接口的配置-->
<bean id="stuBeanFac" class="bean.StuBeanFactory"/>
</beans>
id:是唯一标识类的,name可以重命名类。
factory-method:指的是当前工厂类里面的方法。
scope:作用域,表示的是bean的作用范围,有两个值singleton和prototype,分别代表单例和原型。单例代表的是在容器初始化的时候,会把xml文件中所有的bean加载到容器中,当使用时就从容器中拿;原型则相反,在容器加载时不会把bean加载到容器中,当使用者真正使用的时候在加载。
init-method:所声明的方法会在创建对象时初始化。
destroy-method:当bean是单例的时候,所声明的方法会在对象销毁时执行;当对象是原型的时候则不会执行。
3、多模块配置
1、把多个模块的配置文件集中到一个xx.xml文件中,集中管理,使用的时候就使用这个xx.xml文件就行了。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--导入其他模块的配置文件-->
<import resource="appConfig1.xml"/>
<import resource="appConfig2.xml"/>
<import resource="appConfig3.xml"/>
</beans>
2、在使用spring框架来创建bean的时候传入可变长参数,把多个xml文件传入
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("appConfig.xml","appConfig2.xml","appConfig3.xml");
3、使用spring框架来创建bean
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("appConfig.xml");