Spring听课笔记(专题二)
阅读原文时间:2023年07月08日阅读:1

第3章 Spring Bean的装配(上)

3-1:配置项及作用域

  

  1.Bean的配置项:

    -- Id

    -- Class (这个必须,其他的都可以不配置)

    -- Scope (作用域)

    -- Constructor arguments (属性注入: 构造器注入)

    -- properties  (属性注入:设值注入)

    -- Autowired mode(自动装配模式)

    -- lazy-initialization mode (懒加载模式)

    -- Initialization/destruction method (初始化和销毁)

   2. 获取方式

    -- byName (要求被获取的bean有id)

    -- byType (要求被获取的bean有class,id可有可无)

   3. bean的作用域

    -- singleton: 单例,一个Bean容器中只存在一份(默认)

    -- prototype: 每次请求(每次使用)创建新的实例,destroy方式不生效

    -- request: 每次http请求创建一个实例且仅在当前request内有效

    -- session: 同上,每次http请求创建,当前session内有效

    -- global session:基于portletde的web中有效(portlet定义了global session), 如果在  web中,同session   (适合多个子系统)

      如:使用了singleton,那么Bean容器中只有一个

      

3-2 Bean的生命周期:

  1.生命周期:定义  --> 初始化 --> 使用 --> 销毁

  2.初始化的两种方式:

    -- 实现 org.springframework.beans.factory.InitializingBean接口,覆盖afterPropertiesSet方法

      

    -- XML配置init-method:

      

   3.销毁的两种方法

     -- 实现 org.springframework.beans.factory.DisposableBeans接口,覆盖destroy方法

        

     -- 配置 destroy-method

      

   4.全局配置默认初始化、销毁方法

      

   5. 三种配置初始化、销毁方法的总结

(接口 > 配置文件 )   >  全局

   实现接口的初始化和销毁先于在配置文件中配置的初始化和销毁方法,他们都会覆盖掉全局配置的这些方法,全局的配置的方法不执行。配置了全局的初始化和销毁方法,即使没有实现这些方法,也不会报错。另外两种方法配置了就必须实现,否则会报错

3-3 Aware接口

  1.概述

    -- Spring中提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化之后,可以获取相应的资源

    -- 通过Aware接口,可以对Spring相应资源进行操作(一定要慎重)

    -- 为对Spring进行简单的扩展提供了方便的入口

  2.常见接口

    

    

    

    举例:ApplicationContextAware:Bean类实现该接口,通过该接口提供的方法,可以直接获取spring上下文,而不用我们自己手动创建,也可以利用拿到的context去判断下某些bean是否存在

    xml:

      

    Java:

      

    JUnit

      

    结果

      

3-4 Bean的自动装配

  0.概述

    

   1).  被装配对象

    

   2). 装配对象

    

  3). xml配置

    

   4).JUnit测试

    

   5).结果

    

3-5 Resource

  1. Resource:针对于资源文件的统一接口

    -- UrlResource: URL对应的资源,根据一个URL地址即可构建

    -- ClassPathResource : 获取类路径下的资源文件

    -- FileSystemResource : 获取文件系统里面的资源

    -- ServletContextResource : ServletContext封装的资源,用于访问ServletContext环境下的资源

    -- InputStreamResource : 针对于输入流封装的资源

    -- ByteArrayResource : 针对于字节数组封装的资源

  2. ResourceLoader:  所有的application contexts都实现了ResourceLoader接口,因此所有的application contexts都可以被用作获取Resource实例

    

    前缀类型:

      

  3. 例子

  

  MoocResource实现了ApplicationContextAware接口,所以通过setApplicationContext方法获取到applicationContext,然后就可以利用他再resource方法中获取资源了。