aop

SpringAOP声明式事务控制:xml配置(spring提供的事务管理器)

痞子三分冷 提交于 2020-03-03 04:00:29
文章目录 1. 创建 spring 的配置文件并导入约束 2. 编写业务层,持久层 3. 在配置文件中配置业务层和持久层对 4. spring中基于XML的声明式事务控制配置步骤 1. 创建 spring 的配置文件并导入约束 此处需要导入 aop 和 tx 两个名称空间 < ? xml version = "1.0" encoding = "UTF-8" ? > < beans xmlns = "http://www.springframework.org/schema/beans" xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns : aop = "http://www.springframework.org/schema/aop" xmlns : tx = "http://www.springframework.org/schema/tx" xsi : schemaLocation = "http : / / www . springframework . org / schema / beans http : / / www . springframework . org / schema / beans / spring - beans . xsd http : / / www .

spring事务失效

谁都会走 提交于 2020-03-02 20:45:15
最近在做spring 项目中突然发现事务在遇到异常是没有回滚而是提交了,在查了大量的资料之后,算是有了一点头绪,写下来方便以后查找: 前些日子一朋友在需要在目标对象中进行自我调用,且需要实施相应的事务定义,且网上的一种通过BeanPostProcessor的解决方案是存在问题的。因此专门写此篇帖子分析why。 1、预备知识 aop概念请参考【 http://www.iteye.com/topic/1122401 】和【 http://jinnianshilongnian.iteye.com/blog/1418596 】 spring的事务管理,请参考【 http://jinnianshilongnian.iteye.com/blog/1441271 】 使用AOP 代理后的方法调用执行流程,如图所示 也就是说我们首先调用的是AOP代理对象而不是目标对象,首先执行事务切面,事务切面内部通过TransactionInterceptor环绕增强进行事务的增强,即进入目标方法之前开启事务,退出目标方法时提交/回滚事务。 2、测试代码准备 Java代码 public interface AService { public void a(); public void b(); } @Service() public class AServiceImpl1 implements AService

SSM整合基本架构:第二篇

我们两清 提交于 2020-03-02 15:41:04
一. 项目准备 1.1-需求 实现对订单的查询(根据id查询)和更改 1.2-数据库脚本 CREATE DATABASE IF NOT EXISTS ssm; DROP TABLE IF EXISTS `items`; CREATE TABLE `items` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(20) DEFAULT NULL, `price` FLOAT(10,0) DEFAULT NULL, `pic` VARCHAR(40) DEFAULT NULL, `createTime` DATETIME DEFAULT NULL, `detail` VARCHAR(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; INSERT INTO `items` VALUES ('1', '华为P30手机', '1000', NULL, '2018-03-13 09:29:30', '国货杠杠的'); SELECT * FROM items; UPDATE items SET NAME='华为Mate30',price=9999,pic=NULL,createTime='2018-03

Spring源码学习笔记(7)

孤者浪人 提交于 2020-03-02 06:25:55
Spring源码学习笔记(七)    前言--     最近花了些时间看了《Spring源码深度解析》这本书,算是入门了Spring的源码吧。打算写下系列文章,回忆一下书的内容,总结代码的运行流程。推荐那些和我一样没接触过SSH框架源码又想学习的,阅读郝佳编著的《Spring源码深度解析》这本书,会是个很好的入门       写前说句话, 开篇不尴尬 ---- 接下的这一篇当中, 我们将来回顾 Spring 中 AOP 功能的实现流程。 早上精力充沛, 开始新一天的学习 \(^o^)/~        接触过 Spring 框架的同学都知道, Spring 中使用的两个功能无非就是依赖注入的 DI 以及面向切面编程的 AOP, 其中 AOP 又包括了动态 AOP 和静态 AOP 两个方向。 首先,我们来看看 Spring 是如何实现我们最常接触到的动态 AOP 的。 动态AOP     启用 Spring 的 AOP 功能, 需要我们在 Spring 的配置文件中添加 <aop:aspectj-autoproxy/> 。我们将从这个配置为入口看看 AOP 的实现过程。      在 AopNamespaceHandler 中, 有一下初始化代码: 1 public class AopNamespaceHandler extends NamespaceHandlerSupport {

spring aop aspect注解的使用。

倾然丶 夕夏残阳落幕 提交于 2020-03-01 16:52:20
切面方面的jar包 <!-- Spring AOP 切面 模块 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.0.8.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.2</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.2</version> </dependency> public class CustomerBoImpl implements CustomerBo { public void addCustomer(){ System.out.println("addCustomer()

spring tranaction 事务入门

删除回忆录丶 提交于 2020-03-01 15:00:28
一、事务四个属性 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency)。事务必须是使 数据库 从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对 数据库 中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。 二、事务的重要性 打个最简单的比方吧,A和B两人之间的支付宝转账问题,A向B转账50RMB,正常的结果是,A - 50 并且 B + 50; 但如果是下面这种情况,那就杯具了,A - 50 成功,而B + 50 失败。这样一来岂不是 A亏大了!谁还敢随意转账?就算是首富,也不敢随意转账O(∩_∩)O哈! 所以,在进行 A - 50 和 B + 50 需要添加事务管理。 三、先看下没有加事务的Demo, 看完就知道事务的重要性啦~ (1)、整体结构、 (2)、jar 包 (3)、SQL语句 创建数据库 create database spring; 建立表 create table countmoney

spring AOP 实现方式1

牧云@^-^@ 提交于 2020-03-01 13:18:01
IUserService.java package com.qfwh.app01; import java.util.List; public interface IUserService<T> { /*** * 获取 * */ List<T> getAllUser(); /** * 保存用户 */ Boolean saveUser(T user); /** * 删除 * */ boolean deleteUser(int uid); /** * 跟新 */ boolean updateUser(T obj); } UserServiceImpl.java package com.qfwh.app01; import java.util.ArrayList; import java.util.List; public class UsrServiceImpl implements IUserService { @Override public List<Object> getAllUser() { System.out.println("----------getAllUser--------------"); return new ArrayList<>(); } @Override public Boolean saveUser(Object user) { System

Spring+MyBatis整合

一笑奈何 提交于 2020-03-01 09:59:05
一、准备工作   1.1准备jar包            建表语句: CREATE TABLE `t_customer` ( `id` int(32) NOT NULL AUTO_INCREMENT, `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `jobs` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `phone` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;   1.2编写配置文件:     1.2.1db.properties    #dataSource #Thu Mar 07 16:27:40 CST 2019 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/sm jdbc.username=root jdbc

Spring AOP动态代理-通知

时光毁灭记忆、已成空白 提交于 2020-03-01 03:50:29
在上一篇中,我们用JDK动态代理和CgLib实现了例子中的业务逻辑。那么如果用Spring,如何实现呢? 上一篇: http://my.oschina.net/lfy2008/blog/663999 我们依然有上一章的原材料: 业务逻辑接口:TakingTrain 实现类:TakingTrainImpl 增强的横切逻辑:CheckTicket spring中的相关概念 增强的横切逻辑:Advice 增强类型可以分为: 前置增强:BeforeAdvice 后置增强:AfterRunningAdvice 环绕增强:MethodInterceptor 异常抛出增强:ThrowsAdvice(哈哈,现在是不是可以自己用它来控制事物) 引介增强:IntroductionInterceptor CheckTicket的改造: 我们知道,CheckTicket中的方法调是在在TakingTrain的方法之前。那么,我们可以让CheckTicket实现前置增强的接口: public class CheckTicketAdvice implements MethodBeforeAdvice{ @Override public void before(Method method, Object[] args, Object target) throws Throwable { System.out

Spring个人笔记

断了今生、忘了曾经 提交于 2020-02-29 21:04:17
xml配置 1.xml基本结构: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- more bean definitions go here --> </beans> 其中id是bean字符串,bean的唯一标识符,相当于对象名,class是bean类名的完全限定路径 2.别名