Spring 相关知识

1.Spring 版本

    Spring 1.x:用xml文件来配置,在xml文件来配置Bean,可以在xml文件中轻松的进行处理

    Spring 2.x:在xml文件上做了一定的优化,让配置看起来越来越简单,但是并没语完全解决xml冗余的问题

    Spring 3.x:使用spring提供的java注解来取代曾经xml配置上的问题

    Spring 4.x:甚至连xml配置文件都不需要了完全使用java源码级别的配置与spring提供的注解就能快速的开发spring应用程序,但仍然无法改变Java Web应用程序的运行模式,我们仍然需要将war部署到Web Server 上,才能对外提供服务

2.Spring 模块

         Spring Core:核心类库,主要组件是 BeanFactory,它是工厂模式的实现,使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开

         Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);

   Spring  AOP:AOP服务;

   Spring  DAO:对JDBC的抽象,简化了数据访问异常的处理;

   Spring ORM:对现有的ORM框架的支持;

   Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传;

   Spring MVC:提供面向Web应用的Model-View-Controller实现。
3.Spring IOC

   IOC Inversion Of Control 控制反转,创建对象的控制权的转移;

   别名 DI Dependency Injection 依赖注入 ,应用程序在运行时依赖IoC容器来动态注入对象需要的外部资源;

   Spring IOC 容器来负责对象的生命周期和对象之间的关系;

   注入方式:

       1)构造器注入:被注入的对象通过在其构造方法中声明依赖对象的参数列表,让外部知道它需要哪些依赖对象

YoungMan(BeautifulGirl beautifulGirl){
        this.beautifulGirl = beautifulGirl;
}

       2)setter注入:

public class YoungMan {
    private BeautifulGirl beautifulGirl;
    public void setBeautifulGirl(BeautifulGirl beautifulGirl) {
        this.beautifulGirl = beautifulGirl;
    }
}

     3)接口注入(Spring没使用)

4.Spring IOC 容器
    1)BeanFactory:Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系;
            只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化;
         通常以编程的方式被创建;
        支持BeanPostProcessor、BeanFactoryPostProcessor的使用,手动注册
 2)ApplicationContext:ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能;
        在容器启动时,一次性创建了所有的Bean;
        唯一的不足是占用内存空间;
         还能以声明的方式创建;
        支持BeanPostProcessor、BeanFactoryPostProcessor的使用,自动注册
5.Spring 自动装配 

   xml配置中共有5种自动装配:

         (1)no:默认的方式是不进行自动装配的,通过手工设置ref属性来进行装配bean。

        (2)byName:通过bean的名称进行自动装配,如果一个bean的 property 与另一bean 的name 相同,就进行自动装配。 

       (3)byType:通过参数的数据类型进行自动装配。

       (4)constructor:利用构造函数进行装配,并且构造函数的参数通过byType进行装配。

       (5)autodetect:自动探测,如果有构造方法,通过 construct的方式自动装配,否则使用 byType的方式自动装配

  基于注解的自动装配:需要在Spring配置文件进行配置,<context:annotation-config />

       @Autowied、@Resource或@Inject

      @Autowired:用于在 setter 方法,构造函数,具有任意名称或多个参数的属性或方法上自动装配 bean,默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在

      @Resource: 默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入

6.Spring 框架中都用到了哪些设计模式?

   (1)工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;

   (2)单例模式:Bean默认为单例模式。

   (3)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;

   (4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。

  (5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现ApplicationListener
7.注解

    @Component:这将 java 类标记为 bean。它是任何 Spring 管理组件的通用构造型。spring 的组件扫描机制现在可以将其拾取并将其拉入应用程序环境中。

    @Controller:这将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中。

    @Service:此注解是组件注解的特化。它不会对 @Component 注解提供任何其他行为。您可以在服务层类中使用 @Service 而不是 @Component,因为它以更好的方式指定了意图。

    @Repository:这个注解是具有类似用途和功能的 @Component 注解的特化。它为 DAO 提供了额外的好处。它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。

   @Required 应用于 bean 属性 setter 方法,仅指示必须在配置时使用 bean 定义中的显式属性值或使用自动装配填充受影响的 bean 属性

 
原文地址:https://www.cnblogs.com/dxjx/p/12546296.html