Spring:AOP
AOP的术语
- 连接点:类里面的哪些方法可以被增强,这些方法就成为连接点。
- 切入点:实际真正被增强的方法,这些方法就被成为切入点。
- 通知(增强):实际增强的逻辑部分称为通知。通知有多种类型:前置通知、后置通知、环绕通知、异常通知、最终通知。
- 切面:切面是一个动作。把通知应用到切入点的过程就叫切面。
基于Spring的AOP操作。
Spring框架一般都是基于AspectH实现AOP操作的。
-
什么是AspectJ
AspectJ不是Spring的组成部分,是一个独立的AOP框架。一般把AspectJ和Spring框架一起使用,来完成AOP的操作。
-
基于AspectH实现AOP操作
- 基于xml配置文件实现
- 基于注解方式实现
-
切入点表达式作用:知道对哪个类里的哪个方法进行增强。
-
语法结构:
execution([权限修饰符][返回类型][全类名][方法名称]([参数列表]))
基于注解,完成AOP操作
-
创建类,在类里定义方法
-
创建增强类,编写增强逻辑
-
进行通知的配置。
-
开启注解扫描
<context:component-scan base-package="com.boerk.aopAnno"/>
-
使用注解创建User类和UserProxy的对象。
-
在增强类上添加注解
@Aspect
//增强的类 @Component @Aspect public class UserProxy {} //被增强的类 @Component public class User {}
-
在Spring配置文件中开启生成代理对象
<aop:aspectj-autoproxy/>
-
-
配置不同类型的通知。
-
在增强类的方法上加上注解,使用切入点表达式完成。
@Before("execution(* com.boerk.aopAnno.User.add(..))")
-
-
对相同的切入点进行抽取
@Pointcut(value ="execution(* com.boerk.aopAnno.User.add(..))") public void pointCut(){} @Before("pointCut()") public void before(){ //前置通知 System.out.println("before"); }
-
使用
@Order(num)
可以设置增强类的优先级,num越小则优先级越高。
基于XML实现AOP
-
创建两个类,增强类和被增强类,创建方法
-
在spring的配置文件中创建两个类的对象
-
在spring配置文件中配置切入点
<!--配置aop增强--> <aop:config> <!--配置切入点--> <aop:pointcut id="p" expression="execution(* com.boerk.aopXml.User.add(..))"/> <!--配置切面--> <aop:aspect ref="userProxy"> <!--配置增强效果具体在哪个方法上--> <aop:before method="before" pointcut-ref="p"></aop:before> </aop:aspect> </aop:config>
JDBCTemplate
什么是JDBCTemplate?
Spring框架对JDBC进行了封装,使用JDBCTemplate可以很方便地实现对数据库的增删改查操作。
查漏补缺——Druid数据连接池
//创建Properties对象
Properties properties = new Properties();
//通过类的加载器获取系统加载器然后以流的方式获取资源文件
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("Druid.properties");
//使用Properties对象调用load方法,读取资源流
properties.load(is);
//使用Druid资源工厂创建数据源
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
System.out.println(dataSource);
//通过数据源获取连接
Connection connection = dataSource.getConnection();