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代码session

 

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告诉咱们:应该多用子元素,尽可能少用属性,子元素是扩展性更好
 ******************************************************************/prototype

  不管是<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实例被销毁

相关文章
相关标签/搜索