zoukankan      html  css  js  c++  java
  • spring IOC&ID,AOP和事务的概述

    配置bean

       配置形式:基于xml文件的方式;基于注解的方式。

      Bean的配置方式:通过全类名(反射),通过工厂方式(静态工厂方法&实例工厂方法)、FactoryBean

      IOC容器的applicationContext&BeanFactory概述

      依赖注入的方式:属性(set)注入,构造注入。(构造注入用index区分第几个参数,用type匹配类型)

      注入属性值细节

      自动装配 byName&byType

      bean之间的关系:继承;依赖

      bean的作用域:singleton;prototype;WEB环境作用域

      使用外部属性文件

      speL

      IOC容器中bean的生命周期

      Spring 4.x新特性:泛型依赖注入

    spring通过注解配置bean

    spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件。

    特定组件包括:

    @component:基本注解,表示一个受spring管理的组件。

    @respository:标识持久层组件

    @service:标识逻辑层(业务层)组件

    @Controller:标识表现层组件

    当在组件类上使用了特定的注解之后,还需要在spring的配置文件中声明<context:component-scan>:

    -----base-package属性制定一个需要扫描的基类包,Spring容器将会扫描这个基类包里及其子包中的所有类。

    -----当需要扫描多个包时,可以使用逗号隔开

    -----如果仅仅希望扫描特定类而不是非基包下的所有类,可使用resource-patterm属性过滤特定的类。

    ----<contect:include-filter>子节点表示要包含的目标类。

    ----<contect:exclude-filter>子节点表示排除在外的目标类。

    ----<context:component-scan>下可以拥有若干个<contect:include-filter>子节点和<contect:exclude-filter>子节点。

    组件装配

    @Autowired注解自动装配具有兼容性的单个Bean。@Autowired可以在放在构造器,普通字段等一切具有参数方法都可以应用。

    默认情况下所有的@Autowired注解的属性都要被设置,找不到配置就会抛出异常。若某一属性允许不被配置,可以设置@Autiwired注解的required属性为FALSE.

    AOP

    AOP(面向切面编程):主要编程对象是切面,而切面模块化横切关注点。

    aop的好处:

    ----每个事物逻辑位于一个位置,代码不分散,便于维护和升级。

    ----业务模块更简洁,指包含核心业务代码

    eg:每个方法前后的验证和日志,如果在每个方法都加,会很臃肿。所以抽取横切关注点。

    AOP的配置:

    ----基于AspectJ配置AOP

    1、要在Spring应用中使用AspectJ注解,必须在classpath下包含AspectJ类库:aopalliance.jar、aspectj.weaver.jar和spring-aspects.jar

    2、将aop Schema添加到<beans>根元素中(application.xml中头部)。

    3、要在SpringIOC容器中启用AspectJ注解支持,只要在Bean配置文件中定义一个空XML元素<aop:aspectj-autoproxy>

    当SpringIOC容器侦测到Bean配置文件中的<aop:aspectj-autoproxy>元素,会自动与AspectJ切面匹配的Bean创建代理。

    4、把横切关注点的代码抽象到切面类中。切面首先在IOC中配置一个Bean,再在类前加@Component注解和@AspectJ注解。

    5、在类中声明各种通知(@Before前置通知,@After后置通知,@AfterRunning返回通知,在方法返回结果之后执行,@AfterThrowing异常通知,在方法抛出异常之后,@Around环绕通知,围绕着方法执行)

    ----基于XML配置AOP

    AOP优先级:

    可以通过@Order注解指定切面的优先级,值越小优先级越高。

    使用@Pointcut来声明切入点表达式,后面的其他通知直接使用方法名来引用当前的切入点表达式。

    事务

    一系列的动作被当作一个独立单元,要么都完成要么都不起作用。

    原子性:要么都完成要么都不起作用。

    一致性:一旦事务动作完成,事务被提交,数据和资源就处于一种满足业务规则一致性的状态中。

    隔离性:可能会有很多事物会同时处理相同的数据,因此每个事物都应该与其他事务隔离开来,防止数据损坏。

    持久性:一旦事务完成,无论发生什么系统错误,它的结构都不受影响。通常情况下,事物的结果被写道持久化存储器中。

    配置事务:

    1、在applacationContext.xml中配置事务管理器DataSourceTransationManager

    2、启用事务注解驱动

    3、在方法前边加注解@Transational

    spring支持事务的传播行为

    required -----如果事务在运行,就用当前事务,否则就启动一个新事务。

    required_new ----当前的方法必须启动新事务,并在他的新事务内运行。如果有事务在运行,应该将它挂起

    supports ---如果有事务在运行,就在当前事务运行,否则它可以不运行在事务中

    not_supports ---当前方法不应该在事务中,如果有运行事务,将其挂起。

    mandatory ---当前方法必须在事务中运行,如果有正在运行的事务,就抛出异常

    never ---当前方法不应该运行在事务中,如果没有正在运行的事务,就抛出异常

    nested ---如果有事务在运行,当前方法应该嵌套在事务内运行,否则启动一个新事务,并在自己的事务内运行。

    @Transational使用propagation指定事务的传播行为

    @Transational(propagation=Propagation.REQUIRED)

    出来通过注解使用事务,还可以通过xml配置来使用事务。

  • 相关阅读:
    剑指offer51-正则表达式匹配
    剑指offer50-构建乘积数组
    剑指offer49-数组中的重复
    PHP系列笔记——Zend_Controller工作流程
    多态与重载
    读取文件数据的大概流程
    基于HTTP协议下载文件的实现
    C++中的面向对象笔记
    firebreath注册接口
    python读取excelxlsx,写入excel
  • 原文地址:https://www.cnblogs.com/maoyizhimi/p/7154424.html
Copyright © 2011-2022 走看看