项目要加一个日志记录功能,需要对一些敏感信息进行一个日志记录,以前做过登陆的日志记录,做法很简单,就是在登陆方法后头加上日志的数据库插入,这样做一处还好,现在需要跟多操作都加上日志记录,如果每个地方都加上日志的数据库日志插入,即繁琐,代码的重复度也很大。Spring AOP的面向切入编程很好的解决了这个问题,通过在切入点(方法前,方法后,方法异常)植入通知(日志记录,事务管理...),这样就可以很灵活方便的在一些方法上加上一些跟业务逻辑无关的操作,可见AOP是对OOP的一个很好的补充。
下面就直接说说日记功能的实现步骤:
1.配置applicationContext-mvc.xml
加上这样的配置
<mvc:annotation-driven />
<!-- 激活组件扫描功能,在包cn.edu.pzxx.scampus及其子包下面自动扫描通过注解配置的组件-->
<context:component-scan base-package="cn.edu.pzxx.scampus" />
<!-- 启动对@AspectJ注解的支持 -->
<!-- proxy-target-class等于true是强制使用cglib代理,proxy-target-class默认是false,如果你的类实现了接口 就走JDK代理,如果没有,走cglib代理 -->
<!-- 注:对于单利模式建议使用cglib代理,虽然JDK动态代理比cglib代理速度快,但性能不如cglib -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
2.创建日志实体
package cn.edu.pzxx.scampus.sys.entity;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import cn.edu.pzxx.scampus.core.base.BaseEntity;
@Entity
@Table(name="sys_log")
public class Log extends BaseEntity{
/**
* @Fields serialVersionUID : TODO
*/
private static final long serialVersionUID = 1L;
/**
* 描述
*/
@Column(length = 255)
private String description;
/**
* 方法名
*/
@Column(length = 255)
private String method;
/**
* 日志类型
*/
@Column
private String logType;
/**
* 请求ip
*/
@Column(length = 64)
private String requestIp;
/**
* 异常代码
*/
@Column(length = 64)
private String exceptioncode;
/**
* 异常详细
*/
@Column(length = 255)
private String exceptionDetail;
/**
* 参数
*/
@Column(length = 64)
private String params;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description == null ? null : description.trim();
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method == null ? null : method.trim();
}
public String getLogType() {
return logType;
}
public void setLogType(String logType) {
this.logType = logType;
}
public String getRequestIp() {
return requestIp;
}
public void setRequestIp(String requestIp) {
this.requestIp = requestIp == null ? null : requestIp.trim();
}
public String getExceptioncode() {
return exceptioncode;
}
public void setExceptioncode(String exceptioncode) {
this.exceptioncode = exceptioncode == null ? null : exceptioncode.trim();
}
public String getExceptionDetail() {
return exceptionDetail;
}
public void setExceptionDetail(String exceptionDetail) {
this.exceptionDetail = exceptionDetail == null ? null : exceptionDetail.trim();
}
public String getParams() {
return params;
}
public void setParams(String params) {
this.params = params == null ? null : params.trim();
}
}
3.日志的dao,service具体代码就不放出来,大致就是对日志实体的增删查
@Repository("logDao")
public class LogDao extends BaseDAO{
/**
这里省略日志实体增删代码
*/
}
public interface LogService extends BaseService{
public PageModel<Log> listLog(PageModel<Log> pageModel);
}