Spring中开启切面代理
在JavaEE开发中,经常遇到日志记录/登录检查的需求,如果要给每个方法都加上同样的代码,费时费力还不容易扩展,于是就有了切面这种东西,说白了就是生成一个代理,在某方法执行前后加上自己的逻辑,Spring中有两种代理模式,一种是基于JDK的接口代理(不能代理类),一种是基于CGLIB的代理(接口和类都可以),CGLIB是依赖于ASM的字节码操作类库,可以方便的生成指定类的子类代理,实现方法增强
Spring中有两种切面代理方式:基于注解和基于表达式,基于注解一般用于被代理的类方法较少的时候,不然写完代理每个方法上面都要加上注解,基于表达式可以进行匹配,例如com.test包下面以qry开头的方法加上切面代理
环境
- jar包
在项目中引入如下jar包,我的Spring版本是4.1.4.RELEASE
// gradle
compile(
'org.aspectj:aspectjweaver:1.9.2',
'org.aspectj:aspectjrt:1.8.13'
)
//maven
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.13</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>
</dependency>
- 配置
在spring-mvc.xml中配置如下内容,开启切面(web.xml中org.springframework.web.servlet.DispatcherServlet引入了spring-mvc.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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop