• Spring学习笔记 Part.01


    Hibernate的作用:
      1.可以解决以面向对象的方式操作数据库的问题
       请求参数(String)→Strut2→Action(对象)→业务逻辑组件(面向对象)
      2.所以任何一个ORM框架都可以代替Hibernate,JPA更加可以;
    Spring能做什么?
      A.解决各层组件之间的硬编码耦合(类名的直接耦合)
       可以让各组件之间以“面向接口”的方式编程,从而提供更好的可扩展性
      B.能解决事务、权限检查等这种具有通用性质、横切性质的处理逻辑
      C.Spring提供了对大部分操作的简化功能
       Spring再次简化了开发者的工作量

      两大功能:
       - 提高程序的可扩展性、可维护性
       - 可以提高程序员的开发效率

    ==============解决各组件之间的硬编码耦合(类名的直接耦合)==============
      1.让各组件之间面向接口编程;
      2.程序员还需要自己写一个工厂,组件通过工厂去主动获取它所依赖的组件
    Spring是什么?
      Spring是大工厂,所有的Java对象都可由它来产生,它是所有对象的工厂,超级工厂
      Spring的安装:
       (1)导入Spring Jar包
       (2)增加一个Spring配置文件
       (3)获取Spring容器(Spring工厂),再通过工厂去获取工厂中的产品

    Spring容器(超级工厂)
      1.                BeanFactory
                    AppicationContext
        CassPathXmlApplicationContext   FileSystemXmlApplicationContext
      A组件,需要去调用B组件的方法
       - 称为A组件依赖B组件


      - 传统模式下: A组件主动去创建B组件
      - 工厂模式下: A组件调用B组件的工厂去获取B组件
      - Spring模式下: A组件只要为B组件提供一个setter方法即可,然后在Spring配置文件中配置即可

    Spring的本质:
      通过XML配置来驱动Java代码
      Spring用的熟,几乎所有Java代码都放在XML去配置
      要求:眼中看到的XML配置,心中想的是执行的Java代码

    ApplicationContext多BeanFactory的如下功能:
      A.国际化支持
      B.支持资源(来自磁盘、网络、IO流、Web应用的文件或数据)访问
      C.加载多个配置文件
      D.事件支持

      每个Bean除了可拥有id之外,还可以拥有很多个别名(外号)


     /**************************************************
      Spring是一个超级大工厂
      对Spring来说:一切都是Bean
      即使构造器私有(用private修饰),Spring依然可以创建Bean的实例
     **************************************************/


    Bean的作用域:
      singleton - 当ApplictionContext初始化时,容器会自动初始化所有singleton Bean
      每次程序向Spring容器请求时,Spring容器总是返回最开始创建的singleton Bean
      prototype- 每次程序向Spring容器请求时,Spring容器会临时去创建prototype Bean
      request - 要在Web应用才有效。每个用户请求,Spring创建一个Bean实例
      request - 要在Web应用才有效。每个用户会话,Spring都只创建一个Bean实例
      global session -在portlet context才有效
     /******************************************************************
     W3C推荐:
      XML文档应该多用于子元素,少用属性。
      <user name="孙悟空" address="花果山"/>
      与下面方式对比
      <user>
        <name>孙悟空</name>
        <address>花果山</address>
      <user>
      可以扩展
      <user>
        <name>
          <first>悟空</first>
          <last>孙</last>
        </name>
        <address>
          <detail>花果山</detail>
          <zip>5423423</zip>
        </address>
      <user>
      W3C告诉我们:应该多用子元素,尽量少用属性,子元素是扩展性更好
     ******************************************************************/

      无论是<property .../>(调用setter方法)还是<constructor-arg.../>(有参数的构造器)
    =================需要传入各种类型的实参=================
      1.基本类型及其包装类、String、Date等标量类型。用value属性或value子元素传入值
      2.自定义类。需要ref或嵌套Bean传入值
      3.List、Set、数组、Map等集合

    ==============嵌套Bean==============
      嵌套Bean不是直接定义杂<beans.../>元素中,而是定义在<property.../>或<constructor-arg.../>里
      结论:嵌套Bean与外层的Bean的配置几乎完全一样的。
      只是嵌套Bean不需要id,Spring容器不能直接访问。嵌套Bean是作为setter方法、构造器的参数值;
    ==============注入集合属性==============
      list 元素负责创建List集合和数组
      map元素负责创建Map集合
      set元素负责创建Set集合
      props元素负责创建Properties集合

    ================依赖检查================
      它不会产生实际的影响,它会对配置文件进行语法层次的检查
      强制要求必须为setter方法配置合适的依赖注入
      在有些时候,程序员可能由于某些失误,导致配置文件出错,或漏了配置

    ========实例化Bean的3种方式========
      1.调用构造器来创建Bean
      2.调用工厂类的静态工厂方法
      3.调用实例工厂的实例工厂方法

      无论是静态工厂方法,还是实例工厂方法,都需要增加一个factory-method属性
       实例工厂方法,还需要指定factory-bean属性

      /*******************************

      今天的要点:
        1.创建对象的3种方式
        2.如何控制它调用有参数的构造器
        3.如何控制执行的setter方法
        4.如何为setter方法/构造器传入参数值

      *******************************/

    ==========FactoryBean==========
      它是一个接口,接口里有3个方法:getObject()、getObjectType()、isSingleton();
      如果一个Bean实现了该接口,并在容器中配置了该Bean,接下来程序获取该Bean的时候,实际上返回的只是该Bean的getObject方法的返回值。

      由于getObject()方法由程序员自己实现,因此我们想在这个方法里做什么就可以做什么。

    ==========BeanNameAware==========
    如果MyBean实现了BeanNameAware接口
    Spring创建该Bean之后,会立即、自动调用它的setBeanName方法
    通过BeanNameAware接口,保证我们在首先Bean类时,就可以获得配置该Bean时指定id

    ==========Bean的生命周期==========
      Bean有4个作用域:singleton prototype request session
      对于singleton作用域的Bean,Spring会负责管理它的生命周期
      singleton Bean与Spring容器的生存期限是相同的

      Spring创建Bean实例之后,会立即调用它的对应的setter方法

      1.Bean设值注入之后,添加自己的处理代码
       A.让Bean实现InitializingBean
       B.直接用init-method属性来指定初始化方法
        --这两种机制,只要使用一种即可;

      2.Bean销毁之前
       A.让Bean实现DisposableBean
       B.直接用destroy-method属性来指定销毁之前的方法
        --这两种机制,只要使用一种即可;

      *******Bean生命周期行为*******

             创建实例 → 注入依赖关系
                       ↓
      Bean初始化过程   |  调用afterPropertiesSet
                  |       ↓
                |   调用init-method方法
                       ↓
                    对外提供服务
                       ↓
      Bean销毁之前的行为 |     调用destroy
                |        ↓
                |  调用destroy-method方法    →    Bean实例被销毁

  • 相关阅读:
    MAC下MAMP安装php扩展教程记录
    公司通知正式上班邀请函 3分钟生成微信通知h5邀请函
    H5是什么?H5是否等于HTML5???
    浏览器渲染机制
    小程序后台布局,B站的经典写法
    原创:子组件传递数据给父组件
    父组件传递数据给自定义子组件过程
    原创: 自定义tabs切换组件并使用(微信小程序中
    原创: SpringBoot中filter的使用详解及原理
    若依官方文档 集成jwt实现登录授权访问,返回SysUser对象更多信息给前端
  • 原文地址:https://www.cnblogs.com/otio/p/4095864.html
Copyright © 2020-2023  润新知