Spring基础
文章目录
4种关键策略:
为了降低Java开发复杂性,Spring采取了以下4中关键策略:
- 基于POJO的轻量级和最小侵入性编程;
- 通过DI和面向接口实现松耦合;
- 基于切面和惯例进行声明式编程;
- 通过切面和模板减少样板式代码。
Spring优点
- 低侵入式设计,代码污染低;
- 独立于各种应用服务器,真正实现Write Once,Run Anywhere;
- IOC降低了业务对象替换的复杂性,降低了组件间的耦合度;
- AOP允许将一些通用任务(Eg:安全,事务,日志)进行集中式管理,方便复用;
- ORM和DAO提供了与第三方持久层框架的良好整合,简化DB访问;
- 开发性,开发者可自由选择框架的部分或全部;
Spring容器
Spring自带了多个容器实现,可以归结为2种不同的类型:
bean工厂
- 由org.springframework.beans.factory.BeanFactory接口定义;
- 提供基本的DI支持;
应用上下文
- 由org.springframework.context.ApplicationContext接口定义;
- 基于BeanFactory构建;
- 提供应用框架级别的服务,Eg:从属性文件解析文本信息,发布应用事件给感兴趣的事件监听者。
应用上下文
- AnnotationConfigApplicationContext:从一个或多个基于Java的配置中加载Spring应用上下文;
- AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置中加载Spring Web应用上下文;
- ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源;
- FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文定义;
- XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义。
Spring配置的可选方案
Spring容器负责创建应用程序中的Bean并通过DI来协调这些对象之间的关系。
- 在XML中进行显示配置;
- 在Java中进行显示配置;
- 隐式的Bean发现机制和自动装配。
Spring核心机制————管理Bean
应用程序通过Spring容器来访问容器中的Bean,ApplicationContext是Spring容器常用的接口,该接口用来创建Spring容器,该接口有两个实现类:
- ClassPathXmlApplicationContext:从类加载路径下搜索配置文件;
- FileSystemXmlApplicationContext:从文件系统的相对路径会绝对路径下搜索配置文件;
|
|
DI
Spring 核心功能:
- 负责创建、管理所有Bean;
- 通过DI管理Bean直接依赖关系
DI 两种方式
- 设值注入:setter();
- 构造注入:构造器来设置依赖关系;简言之,Spring以反射执行带指定参数的构造器。1234567891011121314151617<!--属性注入--><bean id="CDPlayer" class="com.loogeoustc.CDPlayer"><property name="" ref ="compactDisc"><property name="" value =""></bean><!---构造注入--><bean id="compactDisc" class = "com.loogeoustc.BlankDisc"><constructor-args value=""/><constructor-args value=""/><constructor-args><set><value></value><value></value></set></constructor-args></bean>
DI两种方式优缺点
设值注入(属性注入)
- 易理解,简单,直观,自然;
- 对于复杂依赖关系,若采用构造注入,会导致构造器臃肿;创建Bean实例时,需同时创建其依赖的全部实例,性能下降。
- 当某些成员变量可选时,多参数构造器更显笨重;
构造注入
- 在构造器中决定依赖关系的注入顺序;
- 没有setter(),所有依赖关系在构造器内设定,无需担心后续代码破坏依赖关系;
- 依赖关系只能由构造器设定,只有组件的创建者才能改变组件的依赖关系,更符合高内聚原则;
Tips: 设值注入为主,构造注入为辅;
Bean作用域
- Singleton(Spring默认作用域):该域的Bean将值生成一个实例;
- Prototype:每次通过getBean()获取该域的实例时,都将获得一个新的实例;
- Request:同一次HTTP请求中,获得的总是同一个实例;
- Session:同一次HTTP会话中,获得的总是同一个实例;
- Global Session:每个全局的HTTP Session 对应一个Bean实例;
NOTES: 3~5: 只在Web应用中有效;
自动注入
由Spring容器检查XML配置文件内容,根据某种规则,为调用者Bean注入被依赖的Bean。
|
|