zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/jcjc/p/13214881.html
Copyright © 2011-2022 走看看