zoukankan      html  css  js  c++  java
  • Spring简介

    一、Spring是什么

    1. Spring框架是一个Java平台,帮助开发人员封装了开发中的基础性的通用问题,让开发人员专注于应用程序的开发

    2. Spring的主要模块有:核心容器、数据访问/集成、事务、Web(MVC)、AOP、消息和测试模块

    二、控制反转(IOC)和依赖注入(DI)

    1. 控制反转:一个对象的实例化B本来是由另一个类A控制的,现在把这个控制权交出去,由别人来控制

    2. 依赖注入:对象A依赖另一个对象B,对象B可以在编译阶段就实例化好,并在使用的时候注入到调用方A,而不在调用方A里实例化

    3. 依赖注入的方式:构造器注入(通过构造函数的参数传入)、setter方法注入(通过setter方法的参数传入)、接口注入(Spring中不使用这种方式)

    三、Spring框架中的IoC容器

    1. IoC容器通过读取配置来创建对象,并管理对象的生命周期

    2. 两种IoC容器

    a. BeanFactory:可以配置任何类型的对象,将bean实例化,是Spring IoC的具体实现

    b. ApplicationContext:对BeanFactory进行了扩展,支持事件和监听器

    ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”); //相对路径
    ApplicationContext context = new FileSystemResource(“C:acean.xml”); //绝对路径

    3. 实现机制:工厂模式+反射

    四、Spring Bean

    1. 在配置文件中配置,由Spring IoC容器创建实例,而不是由应用程序创建实例,是程序的主要的对象

    2. 三种配置方式

    a. 基于XML的配置,<bean>标签配置,指定某个类是bean

    <bean id="aClass" class="com.test.AClass"/>

    b. 基于注解的配置,在类上使用注解,在配置文件里自动扫描,即开启自动装配bean

    <context:annotation-config/> 也打开了注解的自动装配
    <context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>

    或者
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

    c. 基于Java API的配置:在Java类上使用@Bean & @Configuration注解

    3. 内部bean:当一个类A里使用了另一个类B,将他们声明为bean时,将B用作A的属性,B声明的bean为内部bean

    4. 作用域:最常用的是singleton和prototype

    a. singleton:每个bean都是单例,是默认的作用域

    b. prototype:每次请求都会产生一个新的实例

    c. 单例bean某种程度上是线程安全的,但bean需要有状态时,不是线程安全的

    五、Spring Bean的装配

    1. bean的装配:Spring容器使用依赖注入把bean都绑定在一起

    2. 自动装配:通过检查BeanFactory的内容,让Spring自动解析bean的协作者

    3. 自动装配的模式

    a. 默认为no,没有自动装配,使用显式bean引用,进行装配

    b. byName,根据bean的名称注入对象依赖项

    c. byType,根据类型注入对象依赖项

    d. 构造函数

    e. 自动检测

    <context:annotation-config/>

    六、Spring Bean的生命周期:创建->使用->销毁

    七、注解

    1. @Required:用于setter方法,必须要设置此属性

    2. @Autowired:自动装配依赖的对象,是Spring级别的,可以作用于成员变量、setter方法、类的构造函数

    3. @Qualifier:有多个相同类型的bean时,指定其中一个bean来消除歧义

    4. @Resource = @Autowired + @Qualifier,按名称来自动装配依赖的对象,是JDK级别的

    5. @RestController = @ResponseBody + @Controller,@RestController只返回body里的内容,不能返回页面(jsp/html)和跳转

    6. list类型自动注入:通过@Autowired,Spring会自动从容器中取出N个相同类型的bean装配到List类型中,从而简化了依赖注入的过程

    7. Map类型自动注入: 通过@Autowired,Spring会自动从容器中取出N个相同类型的bean以及bean的名称,注入到Map类型的converters中,此时该map得key对应为bean的名称,value则为对应bean对象

    8. @RequestBody, 根据request header Content-Type的值来决定是否使用;@ResponseBody,非html的数据,例如json/xml

    9. 执行顺序:@Constructor->@Autowired->@PostConstruct,并且@PostConstruct必须用于无参构造函数

    八、事务

    1. 声明式事务,使用注解@Transaction或者XML配置

    2. 编程式事务,通过代码实现事务

    九、用到的设计模式

    1. 工厂模式:BeanFactory

    2. 单例模式:Spring Bean默认实例化为单例对象

    3. 代理模式:AOP

    4. 模板方法:JDBC

  • 相关阅读:
    【源码学习之spark core 1.6.1 standalone模式下的作业提交】
    【源码学习之spark streaming 1.6.1 】
    spark udf 初识初用
    spark 累加历史 + 统计全部 + 行转列
    spark 都用了哪些开源东东
    kafka 官方示例代码--消费者
    104. 二叉树的最大深度
    237. 删除链表中的节点
    Leetcode-167. Two Sum II
    Leetcode-215. Kth Largest Element in an Array
  • 原文地址:https://www.cnblogs.com/june0816/p/6803795.html
Copyright © 2011-2022 走看看