spring day03 AOP 面向切面编程
AOP核心概念以及工作流程
首先先将对应的包导入
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
第一步首先先创建对应的通知类 然后在通知类中加入@component 注解来告知这个类要让spring容器识别
第二步写@aspect注解 来告知这是一个AOP类 这里要配合在spring容器中写@EnableAspectJAutoProxy 一起使用这样就可以让spring容器知道这是一个AOP类
第三步在通知类中先定义一个通知用来对在切入点前后执行的操作,也就是增强的共性功能
第四步在通知类中写一个切入点方法 这里用@pointcut注解
第五步用切面将通知和切入点绑定在一起


AOP核心概念
注意 通配符*代表单个独立任意符号 ..代表的是多个连续任意符号
通常情况下 我们这样书写 : @Pointcut("execution(* com.itheima.service.*Service.*(..))")
这样理解 任意返回值 com包下itheima包下service包下的任意以service结尾的类或者接口下的任意方法 参数任意
1.前置通知(Before):在目标方法被调用之前调用通知功能;
2.后置通知(After):在目标方法完成之后调用通知,此时不会关心方法是否正确执行;
3.返回通知(After-returning ):需在目标方法成功执行之后调用通知;
4.异常通知(After-throwing):在目标方法抛出异常后调用通知;
5.环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。

Spring事务作用
-
事务作用:在数据层保障一系列的数据库操作同成功同失败
-
Spring事务作用:在数据层或==业务层==保障一系列的数据库操作同成功同失败
- 这里使用到的注解有@Transactional 此外还需要在对应的jdbcConfig文件中编写一个bean
-
-
注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务
-


事务传播行为:事务协调员对事务管理员所携带事务的处理态度


下面我们在写两个案例来巩固一下今天的知识
案例一
<dependency>
导入spring坐标
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
导入数据源坐标
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
导入mybatis坐标
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
导入mysql坐标
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
导入 spring整合jdbc坐标
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
导入mybatis整合到spring坐标
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
导入测试坐标
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
导入spring测试坐标
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
导入aop坐标
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
案例三