文章目录
1.AOP(面向切面编程)
1.1什么是AOP
面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。通俗来说,AOP指不通过修改源代码方式,在主干功能里面添加新功能
1.2AOP底层原理介绍
AOP底层使用动态代理,分两种情况:
1:有接口的情况下,使用JDK动态代理,创建接口类实现对象,增强类的方法
2:没有接口情况下,使用CGLIB动态代理,创建子类的代理对象,增强类的方法
因为这个课程关于动态的一部分讲的实在一般,这里就不贴代码了。
1.3AOP相关术语介绍
1:连接点
类中可以被增强的方法被称为连接点
2:切入点
类中被增强的方法被称为切入点
3:通知(增强)
(1):实现增强功能的逻辑部分被称为通知(增强)
(2):通知的类型:
①:前置通知:在原方法之前的通知
②:后置通知:在原方法之后的通知
③:环绕通知:原方法前后都有的通知
④:异常通知:发生异常报错的通知
⑤:最终通知:类似于try——catch语句中的finally语句,一定会执行的通知
4:切面
把通知应用到切入点的过程被称为切面
1.4AOP准备工作
1.4.1:AspectJ
AspectJ是一个独立的AOP框架,并不是Spring的组成部分,不过开发人员经常把两者结合起来一起使用。
使用AspectJ需要导入与其相关的依赖包
1.4.1:切入点表达式
1:作用:知道对哪个类中的哪个方法进行增强
2:语法结构
execution([权限修饰符] [返回类型] [类全路径] [方法名称]([参数列表]))
举例1:对dao包下的BookDao类里面的add进行增强
execution(* dao.BookDao.add(…))
①:*:任意的返回值类型
②:权限修饰符被省略了
③参数括号里的两点表示参数
举例2:对dao包下的BookDao类里面的所有的方法进行增强
execution(* dao.BookDao.*(…))
举例3:对dao包下的所有类里面的所有的方法进行增强
execution(* dao.*.*(…))
1.5AOP操作
1.5.1基于注解方式
1.5.1.1步骤
1:创建User类,并定义方法
public class User {
public void add(){
System.out.println("add...");
}
}
2:创建增强类(编写增强逻辑)
//增强的类
@Component
@Aspect//生成代理对象
public class UserProxy {
//前置通知
//@Before表示前置注解
@Before(value = "execution(* user.User.add(..))")
public void before(){
System.out.println("before...");
}
//环绕通知
@Around(value = "execution(* user.User.add(..))")
public void Around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("环绕之前");
//被增强的方法执行
proceedingJoinPoint.proceed();
System.out.println("环绕之后");
}
//后置通知
@AfterReturning(value = "execution(* user.User.add(..))")
public void AfterReturning(){
System.out.println("AfterReturning...");
}
// 最终通知
@After(value = "execution(* user.User.add(..))")
public void after(){
System.out.println("After...");
}
// 异常通知
@AfterThrowing(value = "execution(* user.User.add(..))")
public void AfterThrowing(){
System.out.println("AfterThrowing...");
}
}
3:进行通知的配置
(1):在spring配置文件中,引入相关名称空间并开启注解扫描
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 开启注解扫描-->
<context:component-scan base-package="user"></context:component-scan>
(2):使用注解创建User和UserProxy类对象

(3):在增强类上添加@Aspect注解
(4):在spring配置文件中开启生成代理对象
<!-- 开启Aspect生成代理对象-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
4:配置不同类型的通知
(1):在增强类里面,在作为通知方法的上面添加通知类型注解,使用切入点表达式配置
//增强的类
@Component
@Aspect//生成代理对象
public class UserProxy {
//前置通知
//@Before表示前置注解
@Before(value = "execution(* user.User.add(..))")
public void before(){
System.out.println("before...");
}
}
1.5.1.2相同切入点的抽取
//相同切入点的提取
@Pointcut(value = "execution(* user.User.add(..))")
public void point(){
}
//@Before表示前置
@Before(value = "point()")
public void before(){
System.out.println("before...");
}
1.5.1.3多个增强类对同一个方法进行增强,设置增强类优先级
在增强类绗棉添加注解@Order(数值),数值越小优先级越高
1.5.1.4AOP的配置类编写

2.JDBCTemplate
2.1什么是JDBCTemplate
Spring框架对JDBC进行封装,使用JDBCTemplate实现对数据库进行操作
2.2配置JDBCTemplate步骤
1:引入相关jar包(依赖)
2:在Spring配置文件中配置数据库连接池
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="url" value="jdbc:mysql:///user_db" />
<property name="username" value="root" />
<property name="password" value="aaaaaa" />
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
</bean>
3:配置JDBCTemplate对象。注入DataSource
<!--jdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 注入datasource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
4:创建service类,创建dao类,在dao注入jdbcTemplate对象