(spring-AOP&事务)day44javaEE基础查漏补缺

1.切点表达式

 切点表达式的作用:  定义一组规则, 用于在连接点中挑选切点
 * : 代表占位符,占据的是1个或者多个位置
 .. : 代表占位符,占据的是0个或者多个位置

2.四大通知-不建议使用:

- 前置通知(before) :增强方法在切点运行之前执行
- 后置通知(after-returning):增强方法在切点正常运行结束之后执行
- 异常通知(after-throwing):增强方法在切点发生异常的时候执行
- 最终通知(after):增强方法在切点的最终执行

四个通知,同时使用的时候会:它的执行顺序会收到XML中 配置的影响(after和exception),(注解和xml都有问题)不建议使用。

3.用环绕通知就不要用四大通知了。同时用会报错嘛?

不会报错,只是不建议这样用。

4.xml和配置类可以同时使用吗?

可以

1)在配置类中引入xml配置文件:

@Configuration
@ImportResource("classpath:spring-config.xml")
public class SpringConfig {
}

2)在xml中引入配置类

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/tool http://www.springframework.org/schema/tool/spring-tool.xsd">
    <bean id="strBean" class="java.lang.String" ></bean>
    <context:annotation-config></context:annotation-config>

    <bean class="com.example.config.SpringConfig"></bean>
</beans>

原文链接:https://blog.csdn.net/Guesshat/article/details/108967413

5.经过aop增强之后容器中存的是代理对象,就不是源对象了,获取的都是代理对象。

6.aop应用场景:声明式事务,打印日志,性能统计 。

7.java中的方法签名:singnature&打印方法调用日志信息.

1)方法签名,包括方法名以及参数列表

2)为什么不包含返回值类型?

编译器无法从所有的上下文中确定,该方法是那个重载版本,因此为了避免“模棱两可”的局面, java方法签名中不包含返回值类型

例如:

public String m123(int i) {
return "456";

}

public int m123(int i) {
return 123;

}

java不能签名_为什么Java方法签名不能包含返回值类型_weixin_39931101的博客-CSDN博客

3)aop环绕通知:获取方法签名打印日志:

 @Around("pt()")
    public Object aroundMethod(ProceedingJoinPoint pjp) {
        Object obj = null;
        try {
            System.out.println("即将执行方法" + new Date().toLocaleString());
            obj = pjp.proceed();


            //记录请求:类名\方法名\参数\返回结果
            System.out.println("类名:" + pjp.getTarget().getClass().getName());
            System.out.println("请求参数:" + Arrays.toString(pjp.getArgs()));
            System.out.println("返回结果" + obj);
            MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
            System.out.println("方法名:" + methodSignature.getName());

            System.out.println("方法正常结束" + new Date().toLocaleString());
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            System.out.println("方法出现异常" + new Date().toLocaleString());

        }finally {
            System.out.println("方法运行到最后" + new Date().toLocaleString());

        }
        return obj;
    }

8.Spring事务管理相关的API

1)PlatformTransactionManager

PlatformTransactionManager这是Spring进行事务管理的一个根接口,我们要使用它的实现类做事务管理

我们需要知道的是:mybatis和jdbcTemplate都可以使用它的一个子类(DataSourceTransactionManager)做事务管理

2)TransactionDefinition

TransactionDefinition这个API是用来做事务定义的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9eOb3Jj4-1642790367492)(../../../A_%E9%BB%91%E9%A9%AC%E8%AF%BE%E5%A0%82%E5%BD%95%E5%B1%8F%E8%B5%84%E6%96%99/173%E6%9C%9F%E5%B0%B1%E4%B8%9A%E7%8F%AD%E8%B5%84%E6%96%99/3.173%E6%A1%86%E6%9E%B6(%E7%AC%94%E8%AE%B0%E8%B5%84%E6%96%99)]-%E9%83%AD%E6%96%B0%E6%98%8E%E8%80%81%E5%B8%88/03-springAOP/%E7%AC%94%E8%AE%B0/assets/image-20200710032117241.png)

2-1)隔离级别

2-2)传播行为

a(){
b();//b被a调用
a---b  
a: 没有事务    自己开一个事务
a: 有事务      共用一个事务    
}
b(){}

事务传播行为指的就是当一个业务方法【被】另一个业务方法调用时,应该如何进行事务控制

2-3)只读性

只读事务(增 删 改不能使用,只能查询使用)

换句话说,只读事务只能用于查询方法

2-4)超时时长

事务超时时间, 此属性需要底层数据库的支持

它的默认值是-1, 代表不限制

3)TransactionStatus

TransactionStatus代表的是事务的当前状态

TransactionStatus用于保存当前事物状态,比如是否只能回滚、是否包含回滚点、是否只读,其实现类内部包含事物操作对象transaction
事物操作对象transaction包含不同的实现,比如JDBC的DataSourceTransactionObject、Hibernate的HibernateTransactionObject等。
原文链接:https://blog.csdn.net/my_momo_csdn/article/details/101164559

9.事务管理三个API之间的关系

PlatformTransactionManager通过读取TransactionDefinition中定义事务信息参数,来管理事务,

管理之后会产生一些列的TransactionStatus

10.TransactionDefinition:事务定义,隔离级别,传播行为,只读,超时时长,都可以通过配置来设置

advice:传递的参数:

id 标识,要求唯一
transaction-manager: 指定要给哪个事务管理器传参数
isolation="DEFAULT" 事务隔离级别
propagation="REQUIRED" 事务传播行为
read-only="false"  事务是否只读
timeout="-1" 超时时间  不限制

name="" 用于匹配切点名称,只有匹配成功之后,才能执行所匹配中的策略
        匹配是从上向下依次执行,一旦匹配成功了,就不会向下再匹配了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SxjYTo0r-1642790367493)(../../../A_%E9%BB%91%E9%A9%AC%E8%AF%BE%E5%A0%82%E5%BD%95%E5%B1%8F%E8%B5%84%E6%96%99/173%E6%9C%9F%E5%B0%B1%E4%B8%9A%E7%8F%AD%E8%B5%84%E6%96%99/3.173%E6%A1%86%E6%9E%B6(%E7%AC%94%E8%AE%B0%E8%B5%84%E6%96%99)]-%E9%83%AD%E6%96%B0%E6%98%8E%E8%80%81%E5%B8%88/03-springAOP/%E7%AC%94%E8%AE%B0/assets/image-20220121151024501.png)

注意:method name=“*”,在最下面,作为匹配的保障。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXBe65ZK-1642790367494)(问题.assets/1642790157183.png)]

11.@Transactional

注意方法和类上可以同时出现,方法上的注解优先级高。

记得每天上传。

12.注解中:属性的引用是按id,id是@bean下的方法名,不是return的对象名字。

@bean方法传参是按类型从容器中注入的

注解中:属性的引用是按id,id是@bean下的方法名,不是return的对象名字。

13.数据库事务隔离级别:

级别名字隔离级别脏读不可重复读幻读数据库默认隔离级别
1读未提交(可以读别的事务未提交的,脏读)read uncommitted
2读已提交(可以重复读别的事务已提交的,可能两次读取的数据不一样)read committedOracle和SQL Server
3可重复读(不可以再次读取别的事务提交的修改的的,但可以读取别的事务新增的)repeatable readMySQL
4串行化serializable
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值