Spring第一曲,总览Spring

第一部分:Spring的核心
一:简化java的开发
   使用Spring 可以让简单的JavaBean实现只有EJB才能完成的事情,为了降低Java开发的复杂性,Spring采取了以下四种关键策略
    1基于pojo(简单的java对象)的轻量级和最小侵入性编程
2通过依赖注入和面向接口实现松耦合
3基于切面和惯例进行声明式编程
4通过切面和模板减少样板式代码


1基于pojo(简单的java对象)的轻量级和最小侵入性编程:有很多框架会强迫应用继承他们的类或实现接口,这样会有很多没有用的代码,而Spring竭力避免因自身的API
而弄乱你的代码,在基于Spring 构建的应用中,他的类通常没有任何迹象表明你使用了Spring
 
举例
 
EJB强迫你实现你用不到的方法
  public class Hello implements SessionBean{
     public void ejbActivate(){
 }
  public void ejbPassivate(){
 }
 ......还有很多就不写了,,这些方法都不是核心
 public String say(){//say()方法才是这 Hello类的核心
   return "hello "
 }
  }
 
 
Spring明显的就简洁多了
public class Hello{
  public String say(){
   return "hello "
 }
}
此处体现了:“他的类通常没有任何迹象表明你使用了Spring”
 
虽然形式简单,但此pojo依然具有魔力,Spring通过依赖注入来赋予简单pojo的魔力
 
 
 
   2通过依赖注入和面向接口实现松耦合:在项目中应用依赖注入你会发现代码会变的异常简单,更容易理解与测试
   
   在任何一个实际应用中都会有很多的类组成,这些类相互协调来完成特定的逻辑功能,这样就会高耦合,难测试。
   通过依赖注入,对象的依赖关系有第三方组建在创建对象时去管理,依赖关系将被自动注入到需要他们的对象中去
   
   举例
      不用Spring 
 public DamselRescuingKnight(){
   quest = new RescueDamselQuest();
 }
 
 //耦合高,RescueDamselQuest和DamselRescuingKnight间存在依赖关系
 
   
用spring
private Quest quest
public BraveKnight( Quest quest){
   this.quest=quest: 
}
//耦合低,此处的Quest需要在xml文件里进行装配
(RescueDamselQuest是实现了Quest接口的类)
 
创建应用组件之间协作的行为通常称为装配,Spring有很多装配 Bean 的方式,采用XML配置是一种常见的方式。
 
 
 
3   基于切面和惯例进行声明式编程:AOP编程(切面编程)允许把遍布应用各处的功能分离出来形成可重要的组件
 有些组件除了要有自身核心的代码,还要有比如日志,事务管理安全的代码,这些非核心但是又有必要的代码就会
 让组件的代码变得繁琐,AOP以声明的方式将他们应用到需要的额组件中去,将核心代码和日志这种非核心代码分离
 从而简化代码, 总之,AOP就是为了简化pojo
 
 
4通过切面和模板减少样板式代码:有很多样板式的代码,例如jdbc查询数据,要链接数据库,最后关闭数据库,还要捕获异常。
 除此之外还有很多例如REST服务等也是如此,Spring通过模板封装来消除样板式代码。
 
 
 
 
 
 
 
 
二:Spring容器--Bean的容纳
    1)Spring容器创建对象,装配他们,配置他们,管理他们的生命周期
  2)Spring自带了两种类型的容器实现,Bean工厂和应用上下文(后者常用)



Bean的生命周
1)传统的:用new关键字去创建,一旦不会再被使用就有java的垃圾回收机制去回收
2)Spring:Bean的建立
      1由BeanFactory读取Bean定义文件,并生成各个实例。
      Setter注入
      2执行Bean的属性依赖注入。
      BeanNameAware的setBeanName()
      3如果Bean类实现了org.springframework.beans.factory.BeanNameAware接口,则执行其setBeanName()方法。
      BeanFactoryAware的setBeanFactory()
      4如果Bean类实现了org.springframework.beans.factory.BeanFactoryAware接口,则执行其setBeanFactory()方法。
      BeanPostProcessors的processBeforeInitialization()
      5容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processBeforeInitialization()方法。
      InitializingBean的afterPropertiesSet()
      6如果Bean类实现了org.springframework.beans.factory.InitializingBean接口,则执行其afterPropertiesSet()方法。
      Bean定义文件中定义init-method
      7在Bean定义文件中使用“init-method”属性设定方法名称,如下:
       <bean id="demoBean" class="com.yangsq.bean.DemoBean" init-method="initMethod">
       .......
      </bean>
     8 这时会执行initMethod()方法,注意,这个方法是不带参数的。
       BeanPostProcessors的processAfterInitialization()
     9 容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processAfterInitialization()方法。
      DisposableBean的destroy()
      10在容器关闭时,如果Bean类实现了org.springframework.beans.factory.DisposableBean接口,则执行它的destroy()方法。
       Bean定义文件中定义destroy-method
      在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法
        <bean id="demoBean" class="com.yangsq.bean.DemoBean" destory-method="destroyMethod">
          .......
        </bean>
       这时会执行destroyMethod()方法,注意,这个方法是不带参数的。
 
 
 
 
三:Spring的构成———六大模块
    
1Data 2web 3AOP 4instrumentation 5Core Spring container  6test
 
总结:Spring致力于企业级Java开发,促进代码的解耦,成功的关键在与依赖注入和AOP
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值