# spring-aop-log
**Repository Path**: langxaun_admin/spring-aop-log
## Basic Information
- **Project Name**: spring-aop-log
- **Description**: Spring AOP日志拦截,本项目主要是对Controller的拦截,并且对Service出现异常时进行拦截,从而记录在数据库中
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-09-28
- **Last Updated**: 2021-09-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Spring AOP日志拦截
本项目主要是对Controller的拦截,并且对Service出现异常时进行拦截,从而记录在数据库中
### 难点
**1.拦截Controller注意事项**
想要拦截Controller时要把AOP放到spring-mvc.xml中,否则在拦截不了,本人就在此花了好些时间
**2.aop:aspectj-autoproxy**
```xml
```
proxy-target-class:属性值决定是基于接口的还是基于类的代理被创建。
如果proxy-target-class 属性值被设置为true,那么基于类的代理将起作用(这时需要cglib库)。
如果proxy-target-class属值被设置为false或者这个属性被省略,那么标准的JDK基于接口的代理
**3.order**
```xml
```
spring AOP事务与Afterthrowing冲突是要设置"order"参数,当在执行事务时遇到错误(exception)就会将插入的数据进行回滚,如果想在事务执行遇到exception回滚以后再去控制它去进入afterthowing就要用到"order"参数。
"order"参数,这个参数是用来控制aop通知的优先级,值越小,优先级越高。
**与的区别**
:定义切面(切面包括通知和切点)
:定义通知器(通知器跟切面一样,也包括通知和切点)
定义切面时,只需要定义一般的bean就行,而定义< aop:advisor>中引用的通知时,通知必须实现Advice接口。
** **
proxy-target-class="true" 表示强制使用 CGLIB 技术来实现AOP,因为CGLIB是生成子类也就是代理类来实现的,所以proxy-target-class,表示是否代理目标类。 就会由spring来选择,spring优先使用JDK动态代理来实现AOP。
****
proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。 如果proxy-target-class 属性值被设置为true,那么基于类的代理将起作用(这时需要cglib库)。 如果proxy-target-class属值被设置为false或者这个属性被省略,那么标准的JDK基于接口的代理
****
expose-proxy。为是否暴露当前代理对象为ThreadLocal模式。
补充一下知识点:
@ApiOperation和@ApiParam注解功用
@ApiOperation和@ApiParam为添加的API相关注解,个参数说明如下:
> @ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”);其他参数可参考源码;
> @ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”)
springfox-swagger2、springfox-swagger-ui