文章目录
  1. 1. 4种关键策略:
  2. 2. Spring优点
  3. 3. Spring容器
    1. 3.1. 应用上下文
  4. 4. Spring配置的可选方案
  5. 5. Spring核心机制————管理Bean
  6. 6. DI
    1. 6.1. Spring 核心功能:
    2. 6.2. DI 两种方式
      1. 6.2.1. DI两种方式优缺点
        1. 6.2.1.1. 设值注入(属性注入)
        2. 6.2.1.2. 构造注入
    3. 6.3. Bean作用域
    4. 6.4. 自动注入

4种关键策略:

为了降低Java开发复杂性,Spring采取了以下4中关键策略:

  • 基于POJO的轻量级和最小侵入性编程;
  • 通过DI和面向接口实现松耦合;
  • 基于切面和惯例进行声明式编程;
  • 通过切面和模板减少样板式代码。

Spring优点

  • 低侵入式设计,代码污染低;
  • 独立于各种应用服务器,真正实现Write Once,Run Anywhere;
  • IOC降低了业务对象替换的复杂性,降低了组件间的耦合度;
  • AOP允许将一些通用任务(Eg:安全,事务,日志)进行集中式管理,方便复用;
  • ORM和DAO提供了与第三方持久层框架的良好整合,简化DB访问;
  • 开发性,开发者可自由选择框架的部分或全部;

Spring框架组成视图

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:从文件系统的相对路径会绝对路径下搜索配置文件;
1
2
3
4
5
6
7
public class BeanTest{
public static void main(String[] args){
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
Person p = (Person)ctx.getBean("person",Person.class);
p.say();
}
}

DI

Spring 核心功能:

  • 负责创建、管理所有Bean;
  • 通过DI管理Bean直接依赖关系

DI 两种方式

  • 设值注入:setter();
  • 构造注入:构造器来设置依赖关系;简言之,Spring以反射执行带指定参数的构造器。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <!--属性注入-->
    <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作用域

  1. Singleton(Spring默认作用域):该域的Bean将值生成一个实例;
  2. Prototype:每次通过getBean()获取该域的实例时,都将获得一个新的实例;
  3. Request:同一次HTTP请求中,获得的总是同一个实例;
  4. Session:同一次HTTP会话中,获得的总是同一个实例;
  5. Global Session:每个全局的HTTP Session 对应一个Bean实例;

NOTES: 3~5: 只在Web应用中有效;

自动注入

由Spring容器检查XML配置文件内容,根据某种规则,为调用者Bean注入被依赖的Bean。

1
2
3
4
<!--1.对配置文件中所有的Bean起作用;-->
<beans default-autowire=/>
<!--2.只对该Bean起作用。-->
<bean autowire=/>

参考:http://www.kuqin.com/shuoit/20150720/347139.html

文章目录
  1. 1. 4种关键策略:
  2. 2. Spring优点
  3. 3. Spring容器
    1. 3.1. 应用上下文
  4. 4. Spring配置的可选方案
  5. 5. Spring核心机制————管理Bean
  6. 6. DI
    1. 6.1. Spring 核心功能:
    2. 6.2. DI 两种方式
      1. 6.2.1. DI两种方式优缺点
        1. 6.2.1.1. 设值注入(属性注入)
        2. 6.2.1.2. 构造注入
    3. 6.3. Bean作用域
    4. 6.4. 自动注入