Spring IoC 思想

Spring IoC 思想

  • spring 采用分层架构,根据不同的功能被划分为多个模块1)Data Access2) Web 模块3) Core Container (核心容器)
    
  • IoC 是指程序开发中,实例的创建不在由调用者管理,而是由 Spring 容器创建,      Spring 会负责控制程序之间的关系,而不是有程序代码直接控制,因此,控制权由     程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring IoC 思想*
    
  • Spring 提供了两种 IoC 容器:*      
    BeanFactory:*     
    BeanFactory beanFactory = new XmlBeanBeanFactory(new FileSystemResource("XXX.xml"))**       ApplicationContext ac = new ClassPathXmlApplicationContext(String configLocation);**           二者的区别在于,如果 Bean 的某一属性没有注入,使用 BeanFactory 加载后,getBean()会抛异常*           而 ApplicetionContext 会在初始化时自检,这样有利于检查所依赖的属性是否注入*       在实际开发中,通常使用 ApplicationContext
    
  • Spring 两种依赖注入方式:

  • 当某个 Java 实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的实例(例如,使用 new 关键字获得被调用者实例),而使用 Spring 框架后,被调用者的实例不再由调用者创建,而是由 Spring 容器创建,这称为控制反转。

  • spring 容器在创建被调用者的实例时,会自动将调用者需要的实例注入给调用者,这样,调用者通过 Spring 容器获得被调用者的实例,这称为依赖注入

    • 属性 setter 注入

      • 指 IoC 容器使用 setter 方法注入被依赖的实例,通过调用无参构造器或无参 static 工厂方法实例化bean后,调用该 bean 的 setter 方法,即可实现基于 setter 的 DI
    • 构造方法注入

      • 指 IoC 容器使用构造方法注入被依赖的实例,基于构造器的 DI 通过调用带参数的构造方法实现,每个参数代表一个依赖
  • Spring 实例化 Bean 的三种方式:

    • 构造器实例化
    • 静态工厂方式实例化
    • 实例工厂方式实例化
  • Spring Bean 的作用域

    • spring 容器在创建一个 Bean 实例时,同时会指定该实例的作用域
      1) singleton
      	单例模式,spring默认作用域
      	通常情况下:
      		这种单例模式对于在无回话状态的 Bean (如Dao、Service 层)来			说,是最理想的选择
      2)prototype
      	原型模式,每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例
      	需要保持会话状态的 Bean
      	
      3)request
      4)session
      5)global session
      
      
  • Bean 的生命周期

    • Spring 容器可以管理 singleton 作用域 Bean 的声明周期,在此作用域下,Spring 能够精确的知道 Bean 何时被创建,何时初始化完成、何时被销毁
    • 对于 prototype 作用域的Bean 只负责创建,实例交给客户端代码管理
  • Spring 基于 XML 装配 Bean

    • Java 1.5 后,提供而注解 Annotation功能

    • Spring3 定义了一系列的 Annotation

    • 常用的注解如下:

      • 1、@Component

        • 可以使用此注解描述 Spirng 中的bean,但它是一个泛华的概念,仅仅表示一个组件(Bean),并且可以作用在任何层次,使用时只需将该注解标注在相应的类上即可
      • 2、Repository

        • 用于标注 DAO 层
      • 3、Service

        • 通常作用于业务层
      • 4、Controller

        • 通常作用于控制层,用于将控制层表示为 Spring 中的 Bean,功能和 @Component相同
      • 5、@Autowired

        • 用于对 Bean 的属性变量,属性的 set 方法及构造函数进行标注,配合对应的注解处理器完成 Bean 的自动配置工作,默认按照 Bena 的类型进行装配
      • 6、@Resource

        • 其作用与 Autowired 一样,其区别在于 @Autowired 默认按照类型配置,而 @Resource 默认按照 Bean 实例名称进行装配

        • @Resource 中有两个重要属性:name 和 type。

          Spring 将 name 属性解析为 Bean 实例名称,type 属性解析为 Bean 实例类型。如果指定 name 属性,则按实例名称进行装配;如果指定 type 属性,则按 Bean 类型进行装配。

          如果都不指定,则先按 Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配;如果都无法匹配,则抛出 NoSuchBeanDefinitionException 异常。

      • 7、@Qualifler

        • 与 @Autowired 注解配置使用,会默认的按 Bean 类型装配修改名称装配,Bean 的实例名称由@Qulifler 注解的参数指定
    • Spring 自动装配 Bean

posted on 2020-06-30 17:19  海纳百川_有容乃大  阅读(274)  评论(0编辑  收藏  举报

导航