目录
一、Spring整合Mybatis
(1)项目中导入整合需要的jar包
<dependency>
<!--Spring操作数据库需要该jar包-->
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<!--
Spring与Mybatis整合的jar包
这个jar包mybatis在前面,是Mybatis提供的
-->
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
(2)创建Spring的主配置类
(3)在配置类中完成数据源的创建
(4)主配置类中读properties并引入数据源配置类
(5)创建Mybatis配置类并配置SqlSessionFactory
(6)主配置类中引入Mybatis配置类
(7)编写运行类App并运行
二、Spring整合Junit
(1)引入依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
(2)编写测试类
三、AOP
1、AOP作用
在不惊动原始设计的基础上为其进行功能增强
2、AOP核心概念
(1) 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等,在SpringAOP中,理解为方法的执行
(2)切入点(Pointcut):匹配连接点的式子,在SpringAOP中,一个切入点可以描述一个具体方法,也可也匹配多个方法
一个具体的方法:如com.itheima.dao包下的BookDao接口中的无形参无返回值的save方法
匹配多个方法:所有的save方法,所有的get开头的方法,所有以Dao结尾的接口中的任意方法,所有带有一个参数的方法
(3)通知(Advice):在切入点处执行的操作,也就是共性功能,在SpringAOP中,功能最终以方法的形式呈现
(4)通知类:定义通知的类
(5)切面(Aspect):描述通知与切入点的对应关系。
3、AOP入门案例
案例设定:在方法执行前输出当前系统时间。
(1)添加BookDao和BookDaoImpl类
public interface BookDao {
public void save();
public void update();
}
@Repository
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println(System.currentTimeMillis());
System.out.println("book dao save ...");
}
public void update(){
System.out.println("book dao update ...");
}
}
(2) 创建Spring的配置类
(3)编写App运行类
(4)添加依赖
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
(5)定义通知类和通知
(6)定义切入点
(7)制作切面
- @Before翻译过来是之前,也就是说通知会在切入点方法执行之前执行
(8)将通知类配给容器并标识其为切面类
(9)开启注解格式AOP功能
(10)运行程序,结果为
4、通配符
(1)*:单个独立的任意符号,可以独立出现,也可以作为前缀或者后缀的匹配符出现
execution(public * com.itheima.*.UserService.find*(*))
匹配com.itheima包下的任意包中的UserService类或接口中所有find开头的带有一个参数的方法
(2).. :多个连续的任意符号,可以独立出现,常用于简化包名与参数的书写
execution(public User com..UserService.findById(..))
匹配com包下的任意包中的UserService类或接口中所有名称为findById的方法
5、AOP通知类型
5.1、前置通知
(1)添加BookDao和BookDaoImpl类
public interface BookDao {
public void update();
public int select();
}
@Repository
public class BookDaoImpl implements BookDao {
public void update(){
System.out.println("book dao update ...");
}
public int select() {
System.out.println("book dao select is running ...");
return 100;
}
}
(2)创建通知类
(3)修改MyAdvice,在before方法上添加@Before注解
(4)运行App类,结果为
5.2、后置通知
(1)修改MyAdvice,在before方法上添加@After注解
(2)运行App类,结果为
5.3、环绕通知(重点)
(1)修改MyAdvice,在before方法上添加@Around注解
(2)在around的通知上,加ProceedingJoinPoint pjp,用 pjp.proceed()对原始操作调用
(3) 运行App类,结果为