常用开源框架之Spring

Spring是一个轻量级J2EE框架。

主要功能:

  1、控制反转(IOC)

  2、面向切面编程(AOP)

  3、面向接口开发

  4、事务管理

优点:

  降低其他框架的耦合度,拓展性强、简单易用、便于管理。

IOC:

  1、给对象属性赋值:

    1》通过构造函数

    2》通过set方法

    3》自动装配

      byName:通过参数名称自动装配,当一个bean的name和另外一个bean的property相同时自动装配;

      byType:通过参数类型自动装配,当一个bean的数据类型和另外一个bean的property的数据类型兼容时自动装配(必须保证该类型在IOC容器中只有一个对象,否则报错 );

    4》注解:

      使用注解的步骤:

        1)引入context命名空间:

          xmlns:context="http://www.springframework.org/schema/context"

        2)开启扫描注解:

          <context:component-scan base-package="cn.itcast.e_anno2"></context:component-scan>

        3)使用注解:

          @Component   指定把一个对象加入IOC容器

          @Repository  指定把一个对象加入IOC容器  用于持久层

          @Service  指定把一个对象加入IOC容器  用于业务逻辑层

          @Controller  指定把一个对象加入IOC容器  用于控制层

          @Resource(byName)   属性注入  相当于@Autowired(byType)

   2、bean对象创建细节

      1》创建对象

        scope="singleton"  单例  默认值  service/dao/工具类  线程安全  容器初始化之前创建,且整个应用只能有一个

        scope="prototype"  多例        Action对象    非线程安全  用到时才创建

      2》延迟创建

        lazy-init=“false”  不延迟创建  默认值

        lazy-init=“true”  延迟创建  只针对单例  

   3、Bean的作用域

      1、singleton:默认范围,这种范围确保无论有多少个请求,每个容器中只有一个bean的实例,由bean factory自身维护。

      2、propertory:与单例相反,为每个请求创建一个实例。

      3、request:在bean范围内,为每个请求创建一个实例,当请求完成时会失效并被垃圾回收器回收。

      4、session:与请求范围相似,确保每个session中有一个bean的实例,session过期后,bean随之失效。

   4、IOC容器对baen的生命周期

      1、通过构造器或者工厂方法创建bean实例

      2、为bean的属性设置值和对其他bean的作用

      3、将 bean实例传递给bean后置处理的postProcessBeforeInitlization方法

      4、调用bean的初始化方法init-method将bean实例传递给bean后置处理的postProcessAfterInitlization方法

      5、当容器关闭时调用bean的销毁方法destroy-mmethod

   5、BeanFactory与ApplicationContext的区别

      BeanFactory是Spring容器顶级核心接口,较早,功能较少,如:getBean

      ApplicationContext是Spring的另一个顶级接口,继承于BeanFactory提供了较多对Bean的管理功能:国际化、校验、监听等。

      一般使用ApplicationContext 

AOP

   1、代理模式

      1)代理(proxy),一种设计模式,提供了对目标对象另外的访问方式:通过代理访问目标对象。好处:在实现 目标对象的基础上增加额外的功能。

      2)静态代理(代理对象要实现与目标对象一样的接口):

        1》在不修改目标对象功能的前提下,对目标对象功能扩展。

        2》因为代理对象要实现与目标对象一样的接口,所以会产生很多的类。

        3》接口增加方法时,目标对象与代理对象都要维护。

      3)动态代理(不需要实现接口)

        用JDKAPI生成,动态的在内存中构建代理对象,代理对象不需要实现接口,但目标对象一点更要实现接口,否则无法使用动态代理。

      4)Cglib代理(子类代理)

        在内存中构建一个子类对象从而实现对目标对象的扩展,CGLIB无需实现接口CGLIB包的底层是一个字节处理框架ASM。

   2、AOP

      AOP :aspect object programming  面向切面编程:对很多功能都有的重复代码抽取,通过切入点表达式,制定拦截那些类的哪些方法,给制定的类在运行时植入切面类代码。

      功能:让关注点代码与业务代码分离。

      关注点:重复代码;

      切面(类):由关注点形成的类。 

      切入点:执行目标对象方法,动态植入切面类。

事物

   1、事务使用

      spring的事务包括声明式事务和编程式事务。声明式事务是用spring的aop来实现的;配置了只读事务和回滚事务(传播行为为REQUIRED)当出现错误后回滚操作。在项目中通过AOP切入事务到service层,将一次逻辑业务操作包括在一个事务中。

   2、管理事务

      如果仅执行一次单条的查询语句,则没必要使用事务,数据库默认支持SQL的执行期间的一致性;

      read-only="true"表示该事务为只读事务,只读事务不存在数据的修改,所以数据库会对只读事务提供一些优化:不启用回滚段,不记录回滚log等。

      如何指定只读事务:

        bean配置文件中,prop属性增加“read-only”或者使用注解@Transaction(read-only=true)

      配置完只读事务后,相当于数据库设置成为只读数据库,若此时进行写操作,会出现错误。

    3、spring事务的配置

      先配置事务管理器TransactionManager,

      再配置事务通知和属性,通过tx:advice,

      配置<aop:config>设置哪些方法或类需要加入事务 

    4、事务传播行为

      Propagaion.REQUIRED(spring的默认事务)  :指定当前方法必须在事务的环境下执行,若存在事务,则加入。

      Propagaion.SUPPORTS  :有便用,没有就不用事务。

      Propagaion.REQUIRED_NEW   :指定当前方法必须在事务中执行,若已存在事务,则挂起该事务,新建事务使用,执行完成后恢复刚才挂起的事务。

    5、事务并发

      事务并发会引起脏读、幻读、不可重复读等问题,设置事务的隔离级别可以解决。

 

      

posted on 2018-12-06 08:33  Boahz  阅读(548)  评论(0编辑  收藏  举报

导航