Spring的知识点总结

一如惯例,先来对Spring的知识点有个整体的认识:

 

一、Spring简介

    1.概念:

        Spring是一个开源的用于简化采用Java语言开发企业级程序的一个分层的框架。

 

    2.Spring组成:

        Core封装包是框架最基础的部分,提供IoC和依赖注入特性。

        AOP提供了面向方面的编程实现,让我们可以方便的定义方法拦截器和切点。

        DAO提供了JDBC的抽象和封装,方便我们使用JDBC的方式访问数据库,同时提供了声明式事务管理的功能。

        ORM提供了常用的ORMMapping API(JPA, JDO, Hibernate,iBatis.)的集成。我们公司目前采用Spring提供的ibatis集成。

        Web提供了针对web层开发的集成特性。

 

二、Spring的IoC

    1.概念:

        IoC(Inversion of Control,控制反转):对象的协作关系由对象自己负责。

        DI(Dependency Injection,依赖注入):对象的协作关系由容器来建立。

    2.IoC的类型(即注入方式)

        1)基于特定接口(侵入式方案)

 

        2)基于setter方法

           a.注入简单属性(八种基本类型)。

              对于基本类型,Spring容器会自动作类型转换,以便赋值。

 

           b.注入集合类型

              集合类型有Set,List,Map和Properties。

              Set中存放字符串,对象,集合,不允许重复。

              List中可以放入字符串,对象,List。

              Map有<entry>子元素来存取key,value,key只能为String。

              Properties有<props>子元素。

 

           c.属性编辑器

 

        3)基于构造器(constructor)

如果Bean属性不多,并且属性值必须要注入才能使用,则应该采用constructor注入,其他情况就要set方法注入。

 

           自动装配(AutowringProperties)

              装配方式:byName,byType,autodetect,constructor

 

              byName:按照名称匹配,按照Bean的Id与属性的名称进行匹配。

              自动装配与手动装配可以结合使用,手动装配会覆盖自动装配。

 

              byType:按照类型匹配,要注入的属性类型与配置文件中的Bean类型匹配的个数超过一个,会出错。

 

              antodetect:先按照construct,后按照byType。

 

              constructor:先去匹配构造器中参数类型,后与配置文件中的Bean类型匹配。

 

    3.原理:

       IoC使用的原理就是反射。

       其实IoC就是将对象映射到配置文件中,从而将其创建延迟到了IoC容器中,这样就对对象的创建实现了封装。

 

    4.好处:

       使用IoC的好处有很多,但归根结底也就是反射的好处,我们来看看它都体现在什么方面:

 

      1)大量减少了Factory和Singleton的数量,使代码层次更加清晰,主要原因是我们不再查找,定位和创建和管理对象之间的依赖关系了,都交给了loC容器管理了。

 

      2)Spring的loC容器是一个轻量级的容器,没有侵入性,不需要依赖容器的API,也不需要实现一些特殊接口。

      3)一个合理的设计最好尽量避免侵入性

         

      4)会使我们的框架工作的更好

         

      5)提供了AOP声明式服务能力,可以针对POJO对象提供声明式服务能力,如:声明式事务

         

      6)对于资源,如Hibernate Session或JDBC Connection我们不在负责开启和关闭

         

      7)鼓励了我们面向接口编程

         

      8)减少了代码中的耦合(解耦合),将耦合推迟到了配置文件中,发生了编号也更容易控制。

 

三、Spring的AOP

    1.概念:

      将程序中的交叉业务逻辑提取出来,称之为切面。将这些切面动态织入到目标对象,然后生成一个代理对象的过程。

 

    2.相关概念:

      相关概念有Aspect(切面),Joinpoint(连接点),Advice(通知),Pointcut(切入点),Introduction(引入),Weaving(织入),、Target(目标对象),Proxy(代理对象)等

 

      具体可见:《Spring中的AOP

 

    3.原理:

      AOP使用的原理就是动态代理(说到底也是反射)。

 

四、Spring对持久层的支持

    1.概念:

      继承HibernateDaoSupport类,使用HibernateTemplate来持久化。

 

    2.原理:

      HibernateTemplate是对HibernateSession的轻量级封装。

 

    3.异常与事务回滚

      默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会回滚的。编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理。

关于事务边界的设置,通常设置到业务层,不要添加到Dao上

   

五、Spring对事务的支持

    1.AOP事务的含义

       事务当作一个切面,动态地织入到目标对象,形成一个代理对象。

 

    2.事务机制(支持声明式事务)

      声明式事务的配置:

      配置SessionFactory

      配置事务管理器

      把SessionFactory注入到transactionManager

      事务的传播特性

      哪些类哪些方法使用事务

      具体的实现可参见后面博客SSH框架搭建中的applicationContext-common.xml中的配置。

 

    3.Spring中事务的使用

     1) Spring中使用Hibernate事务(编程式事务)、

         openSession和getCurrentSession的区别?

         openSession必须关闭,currentSession在事务结束后自动关闭。

         openSession没有和当前线程绑定,currentSession和当前线程绑定。

 

     2)全局事务与本地事务

         如果使用currentSession需要在hibernate.cfg.xml文件中进行配置:

           如果是本地事务(jdbc事务)

             <property name="hibernate.current_session_context_class">

              thread</property>

           如果是全局事务(jta事务)

             <propertyname="hibernate.current_session_context_class">jta</property>

       

六、SSH整合

    关于该内容在后面博客中会详细解说。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值