Spring概述
- Spring由Rod Johnson开发,2003年第一次发布。它是一个开源的以控制反转(Inverse of Control,IoC)和面向切面(Aspect Oriented Programming,AOP)为核心的容器框架,用于简化企业级开发。
- 在分层体系架构的系统中,Spring对每一层都提供了技术支持。
- 控制反转:依赖对象不再由调用者来创建,而是由外部容器负责,此时对依赖对象的控制权就由应用转移到了外部容器。这种控制权的转移就称为控制反转。实例化调用者时,可通过依赖注入的方式将依赖对象注入到应用的组件中。
- 传统的方式创建personDao对象
- 依赖注入方式获得personDao对象
- Spring实例化bean方式
- 构造器实例化:通过无参或有参构造器实例化。
- 静态工厂方式实例化:要求创建一个静态工厂的方
法来创建Bean的实例。 - 实例工厂方式实例化:要求创建一个实例工厂的方
法来创建Bean的实例。
- 使用Spring好处:
可以降低组件之间的耦合程度,实现软件各层之间的解耦。(Contoller Service Dao)
Spring为我们提供了众多服务,如事务管理等
容器提供了单例模式支持
Spring提供了AOP技术,利用它可以很容易实现权限拦截等功能
Spring为我们提供了众多的辅助类,如HibernateTemplate等类
Spring提供了对主流的应用框架(如Hibernate、Struts等)的集成支持
Spring的配置文件
Spring配置文件定义了应用程序所用到的各种bean,描述了bean与bean之间的依赖关系。
配置文件使用标签来定义每个bean,一般需要设置以下两个属性:
- id:bean的标识符,其它bean通过该标识符来引用bean,在整个容器中必须唯一(id属性值不能使用特殊符号如“/”,此时可使用name属性替换id属性)。
- class:指定bean的实现类
Spring容器
- BeanFactory(IoC容器):是Spring框架最基本的接口,构建了框架的基础结构,面向Spring本身。它提供了高级IoC的配置机制,使创建、管理各种各样的Bean成为可能。
- ApplicationContext(应用上下文,spring容器)建立在BeanFactory基础之上,提供了更多面向应用的功能,更易于创建实际应用。面向使用Spring框架的开发者
初始化Spring容器
在类路径下寻代配置文件来初始化容器
默认情况下,ApplicationContext初始化时会实例化容器中所有的Bean。
此后,用户就可以通过Spring上下文实例调用getBean(id)方法获取指定的Bean。
Bean的初始化和销毁
- 有时在创建Bean时需要执行一些初始化工作,如打开数据库链接等资源;同样的,在销毁Bean时,也常常需要执行一些特定工作,如关闭已打开的资源。
- 对作用域为单例的Bean,通过相应的设置后,其初始化工作和销毁工作都将由容器自动来执行
Bean的初始化:
Bean的初始化:可在其实例化后自动执行初始化方法。
语法:
在配置文件的中通过init-method属性指定初始化方法。
在类中定义初始化方法,方法名为配置文件中所指定的初始化方法名。
单例Bean的销毁:
Bean的销毁:可在单例Bean销毁前自动执行销毁方法。
语法:
在配置文件的中通过destory-method属性指定销毁方法
在类中定义销毁方法,方法名为配置文件中所指定的销毁方法名。
配置文件的加载:
- 在实际开发中,从表现层的Action到持久层的DataSource之间的所有对象都被Spring作为Bean来管理。如果这些Bean都配置在同一个xml文件中,将不利于阅读和维护。
- 在Spring中,一般是将一个大的配置文件按模块分成多个小的配置文件来管理,在运行时再将这些配置文件加载汇总成一个配置文件。
配置文件的加载方式:
- 使用ApplicationContext加载多个配置文件。
- 在一个XML配置文件中使用标签导入其它XML配置文件,然后由ApplicationContext加载这个配置文件。
- Web应用启动时加载多个配置文件:
- 在Web应用开发中,ApplicationContext.xml是在web.xml中配置加载,此时可以通过ContextLoader接口的实现类以声明式的方式创建ApplicationContext。
- ContextLoader接口的实现类: ContextLoaderListener ContextLoaderServlet
- 在web.xml的之间添加以下配置:
总 结
- Spring是一个以IoC和AOP为核心的容器框架。
- Spring最常用的实例化Bean方式:构造器实例化。
- Spring配置文件的作用、命名、保存位置。
- Bean的作用域及默认作用域。
- 默认情况下,ApplicationContext初始化时会实例化容器中所有的Bean。
- 对作用域为单例的Bean,通过相应的设置后,其初始化工作和销毁工作都将由容器自动来执行。
- 配置文件的加载有三种方式。
示例:
pom.xml:
<dependencies>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.1</version>
</dependency>
</dependencies>