Spring笔记_动态代理

AOP

  • Target 目标对象
  • Proxy 代理 目标对象中的方法 产生结果代理类
  • joinpoint 连接点 被拦截的方法 (可以被增强的方法)
  • Pointcut 切入点 jointPoint中已经增强的为切入点
  • advice 通知、增强 在得到joinpoint之后进行增强所做的事务
  • aspect 切面 pointcut+advice
  • weaving 织入 (动词) 将切点和通知结合的过程

基于注解的AOP开发

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd">
<!--    aop的自动代理-->
    <aop:aspectj-autoproxy  proxy-target-class="true"/>
<!--    配置组件扫描-->
    <context:component-scan base-package="com.spring"/>
</beans>

事务的传播行为

REQUIRED: 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选择(默认值)

A调B时若A中没有事务则新建一个事务若A中有事务则将B加入到A中

SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)

A调B若A中有事务则支持当前事务,如果当前没有事务就以非事务方式执行

REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起。

NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起

NEVER:以非事务方式运行,如果当前存在事务,抛出异常

NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行 REQUIRED 类似的操作

超时时间:默认值是-1,没有超时限制。如果有,以秒为单位进行设置

是否只读:建议查询时设置为只读

编程式事务控制的三个对象

  • PlatformTransactionManager 控制行为 不同的api(取决于用什么平台)
  • TransactionDefinition维护属性信息 封装事务参数
  • TransactionStatus状态信息

PlatformTransactionManager+TransactionDefinition=TransactionStatus

声明式事务控制

基于xml

采用xml声明的方式来处理事务

作用

  • 事务管理不侵入开发的组件,事务管理和开发组件解耦合,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可。(AOP思想)
  • 在不需要事务管理的时候,只要在设定文件上修改一下,即可移去事务管理服务,无需改变代码重新编译,这样维护起来极其方便
 <!--    平台事务管理器-->
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataSource"/>
     </bean>
<!--    设置事务属性信息-->
    <tx:attributes>
<!--        切点-->
        <tx:method name="*"/>
<!--        以update开头的所有方法-->
        <tx:method name="update*"/>


    </tx:attributes>
</tx:advice>
<!--    配置事务织入-->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.spring.demo.*.*(..))"/>
    </aop:config>

切入点表达式:

表示拦截器那些类和那些方法

posted @ 2023-03-14 16:12  EnkiZhang  阅读(19)  评论(0编辑  收藏  举报