`
fengshihao
  • 浏览: 49852 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring in Action 学习笔记

    博客分类:
  • java
阅读更多

Spring in Action 学习笔记


1 Spring 特点
    a 非侵入式,一般基于spring开发的程序不依赖于Spring中的类。

    b DI 依赖注入。又称ioc控制反转。这种设计模式强制 程学设计中使得类之间的关系解耦,使其类之间依赖接口定义
      而非类定义 。这种设计模式有大量实例(bean)装配过程 ,单一重复 ,Spring用xml来简化这种依赖描述。主要使用
      XmlBeanFactory 和 ApplicationContext 。学习细节就是bean如何用xml装配,和bean的生命周期。同时Spring提供了
      很多有用的bean。可以直接使用。

     c AOP 面向方面编程。AOP主要解决的问题是分离业务逻辑。如记录日志的功能在大多数业务里边需要,如果把这些代码
       散落在各个业务逻辑里会造成大了重复代码,而且维护困难。如果使用AOP将使得记录日志功能分离出来,单独面向记
      录日志这一个方面编程 使得以后的更改维护简单。对AOP的支持Spring提供了四种,1基于代理 2Jboss的AOP 
      3 AspectJ 4 Spring AOP。除了AspectJ 其他都是用代理类来实现的,也只能方法注入。 
     
      d Spring 还管理bean的生命周期。而且提供了很多基础功能,如数据库,事务管理,远程调用...

    无论是DI还是AOP Spring用xml配置来实现,都依赖于java的reflection 。

2 Bean 的在Spring中的生成 组装。
  a  bean的生命周期由Spring控制,一次顺序 : 实例化--> 设置bean属性 --> 初始化Bean --使用--容器关闭销毁。
     xml中可以一一配置其中的环节。
  b 创建一个bean
    因为DI要求的是接口依赖 所以创建按的Bean最好是实现某一接口的。
    如:
      public Interface CanDoSth{
         void doSth() throws CanDoSthException;
       }

      public class SomeBody implements CanDoSth{
         public void doSth() throws CanDoSthException{
                System.out.println("done!!");
                }
          private String name="noname";
           public void setName(String na){
              name=na;
              }
        }
      
     通过xml来配置生成一个bean,并为这个实例初始化name属性 如下
   <bean id="people" class="SomeBody">
    <property name="name" value="jack"/>
     </bean>

  c 装配bean ,如果两个bean 一个是car driveable 一个是somebody candrive。  
     public Interface CanDrive{
         void drive() throws CanDrive Exception;
       }

      public class SomeBody implements CanDrive {
         public void drive () throws CanDrive SthException{
                driveable.drive();
                }
          private Driveable driveable;
         
           public void setDriveable (Driveable  da){
              driveable  = da;
              }
        }

    public Interface Driveable{
         void drive() throws  CanDrive Exception;
       }

      public class Car implements  Driveable {
         public void  drive () throws  Driveable Exception{
                System.out.println(" drive car ");
                }
        }
    生成一个汽车xml
  <bean id="acar" class="Car"/>
   让jack驾驶这辆车
  <bean id="people" class"SomeBody" >
    <property name="driveable "  ref="acar"/>
  </bean>
  实现了 Driveable接口的Train plane ..都可以直接替代car写在xml配置里。 这就是接口依赖的好处
  bean依赖的注入方式 可以用setter 也可以用构造函数。
   
  d 实现bean的装配集合 。
    如果一个bean的属性是一个集合,如List Map xml如何配置?
    <bean id="people" class"SomeBody" >
    <property name="driveables " >
       <list>
           <ref bean="acar" />
           <ref bean="atrain" />
           <ref bean="aplane" />  
       </list>
    </property>
  </bean>>
   e 通过设置bean的autowire属性 实现bean的Spring自动装配 。
   f 通过设置bean 的scope属性实现bean实例的范围控制,生存周期。
     1、  singleton ,即单例 bean
       2、 prototype,不是单例bean
       3、 request,这种 bean web request范围内有效,即每次请求时都会产生一个实例。只用于 web程序中。
       4、 session,这种 bean web session范围内有效。只用于 web程序中
       5、 global session,这种 bean web的全局 session范围内有效。只用于 web portlet框架中。

   g bean可以通过实现不同的特定接口 来监听 或者和Spring容器交互。

3 AOP
   Spring 通过实现一个代理类 来实现对目标类访问的织入。如图
     

     
   加入类A是目标类 有dosth()方法。 为了在dosth调用前,或者调用后做一些事情比如记录一下调用时间在log上。
   当然可以把log(time)的代码写到类A的dosth方法里。但这样会使代码不同功能混杂在一起难以维护和重用。做一个
代理类B 在调用dosth的时候 B先调用类C提供的记录时间的功能 然后再调用A的dosth()。这样就可以把记录log的工作
集中到类C里边。log的可以放入三个地方,调用前,调用后 ,异常后。在Spring中叫做“通知” 

   Spring如何在xml中定义实现这些:
   首先 生成一个代理的bean proxy 他代理 beproxybean这个bean
    <bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="target" ref="beproxybean" /> 
        <property name="interceptorNames" value="advisor" /> 这指明要代理的类的通知者,如上例就是类C的实例。
      <property name="proxyInterfaces"  value="beproxyInterface"/> 要被代理的接口
    </bean>
  通知者 是实现了某些接口的类。如实现了before ,afterReturning afterThrowing 方法 这样代理类会在调用被代理
类方法之前或之后调用相应的通知者的before afterReturning等方法。

   一个接口可能有很多方法。上边proxyInterfaces指定了要代理一个接口,那么哪些方法需要调用时告诉通知者呢?这
需要在xml中配置通知者bean
 <bean id="advisor" class="org.springframework.aop.support.RegexMehodPointcutAdvisor">
  <property name="advice" ref="SomeAdvice"/>
  <property name="pattern" ref="regpattern"/>
 </bean>
  pattern属性用正则表达式来确定接口中的哪些方法需要告诉通知者。(符和正则的方法名字)叫做切点。

  Spring2.0中增加了纯粹的POJO切面。使得不需要定义通知者类 而且配置简单,增加了 AOP配置元素。

0
1
分享到:
评论

相关推荐

    Spring in action学习笔记

    ### Spring in Action 学习笔记知识点总结 #### 1. Spring 框架基础 ##### 1.1 Spring 概述 - **轻量级**:Spring 的“轻量级”主要体现在其对资源消耗较少,同时具备低入侵性。在基于 Spring 开发的应用中,业务...

    Spring in Action中文清晰版(带阅读笔记).part1

    Spring in Action中文清晰版(带阅读笔记). Spring in Action中文清晰版(带阅读笔记).

    spring指南学习笔记

    标题和描述均提到了“spring指南学习笔记”,这意味着文档聚焦于Spring框架的学习心得与关键概念。Spring是一个开源的Java企业级应用框架,以其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect ...

    Spring的学习笔记

    以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    Spring in Action 中文 清晰版 (带阅读笔记)

    《Spring in Action》是一本深度剖析Spring框架的权威著作,其中文清晰版为中国的开发者提供了便利,便于理解和学习。本书全面覆盖了Spring的核心概念和技术,包括依赖注入、AOP(面向切面编程)、数据访问、Web开发...

    spring+hibernate学习笔记和项目源代码

    本资源包“spring+hibernate学习笔记和项目源代码”提供了深入理解和实践这两个框架的机会,同时也包含了Struts的集成,形成经典的SSH(Spring、Struts、Hibernate)架构。以下是关于这些主题的详细知识解析: 1. *...

    spring项目开发学习笔记

    容器(spring):管理dao,service,action,...包含并管理应用对象的生命周期和配置 框架:使用组件配置组合成复杂的应用,并提供很多基础功能 Spring提供了对开源社区中很多框架及JavaEE中很多技术的支持,让程序员很...

    struts+spring+hibernate学习笔记

    这个“struts+spring+hibernate学习笔记”应该涵盖了这三个框架的基础知识以及如何将它们整合使用的详细教程。 Struts是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于控制Web应用的流程。它...

    Struts、Spring、Hibernate&Ajax;学习笔记总结

    ### Struts、Spring、Hibernate&Ajax 学习笔记总结 #### Struts 部分 **Struts** 是 Java 开源框架中最早出现且最具影响力的框架之一,它出自 Apache 组织,是 Java Web 应用开发的标准之一。Struts 以 MVC(Model...

    个人spring&struts学习笔记

    1. 学习 Spring 的基本概念和核心组件,理解 DI 和 AOP 的原理。 2. 掌握 Spring Bean 的配置和管理方式,包括 XML、注解和 JavaConfig。 3. 理解 Struts2 的工作流程,编写 Action 类并配置相应的 Action 映射。 4....

    xmljava系统源码-SpringInAction4:《SpringInAction4th》学习笔记

    4th》学习笔记 第一部分 Spring的核心 1. Spring之旅 依赖注入 AOP bean的初始化过程 spring容器 2. 装配Bean “initialization on demand holder”创建单例模式的理解,参考 Spring中单例的概念限于Spring上下文中,...

    spring学习笔记(最新版)

    ### Spring学习笔记(最新版) #### 一、Spring框架简介 Spring框架是一个广泛使用的轻量级企业级应用框架,它提供了全面的解决方案来构建复杂的Java应用程序。Spring的核心特性包括依赖注入(Dependency Injection,...

    spring-note spring 读书笔记

    `spring_struts.txt`可能描述了如何配置Action和ActionForm,以及如何在Spring中管理Struts的业务逻辑。 6. **Spring事务管理**: Spring提供了PlatformTransactionManager接口,支持不同的事务管理策略,如编程式和...

    Spring学习笔记 包括SSH的整合

    总之,Spring学习笔记对于理解SSH整合的全过程及其背后的设计原则非常有帮助,对于希望深入学习Java Web开发的开发者来说是一份宝贵的资源。通过实践和阅读这样的笔记,开发者可以更好地掌握这三大框架的使用,提升...

    spring学习笔记.doc

    - Spring与Struts1集成,可以将Action对象交给Spring管理,通过Struts的配置让Controller管理这些Action,实现业务逻辑与展示层的分离。 以上就是Spring框架的基本知识,包括其核心特性、bean管理、依赖注入、AOP...

    spring in action

    在学习Spring的过程中,"Spring study.txt"和"Spring study.zip"可能包含了作者的学习笔记、代码示例或者相关教程。这些资料可以帮助我们理解Spring的各种特性,例如,Spring MVC的请求处理流程,事务管理,以及...

    spring+struts集成学习笔记和项目源码

    在提供的"spring+struts集成学习笔记和项目源码"中,你将有机会深入理解这些概念,通过实际操作来学习如何将Spring的优秀特性与Struts的高效处理机制结合起来,构建出高效稳定的Web应用。源码分析和实践操作是加深...

    Struts+spring+hibernate学习笔记! - Struts原理与实践 - JavaEye知识库.files

    Spring 作为整体的协调者,可以管理 Struts 的 Action 对象以及 Hibernate 的 SessionFactory 和 Session。Struts 处理 HTTP 请求并调用 Spring 容器中的服务层方法,这些方法再利用 Hibernate 进行数据库操作。这样...

Global site tag (gtag.js) - Google Analytics