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

  • 相关阅读:
    Django 事务 多表操作
    python oss上传图片
    WARNINGS: ?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
    解决VMware服务起不来的问题
    go-用法
    go-基础语法
    django_filters导入失败
    Git
    windows10安装ubuntu18.04(64位)双系统教程
    Ubuntu系统运行Steam中VR游戏的相关软件环境配置说明
  • 原文地址:https://www.cnblogs.com/jcjc/p/13214881.html
Copyright © 2011-2022 走看看