您的位置:首页 > 编程语言 > Java开发

spring+mybatis基于 AOP实现业务日志管理

2015-06-25 21:13 513 查看
最近在项目上用到了操作日志的相关,之前的解决方案就是自己写一个日志project,然后统一调用日志接口即可,这样方便自定义定制,因为有很多设备控制之类的都是需要确认一下的,但是,对数据的操作,比如,增删改查还用这个,就有点多余了,感觉太麻烦了,所以,想想有没有日志管理这样的框架可以调用,然后就想到了spring的AOP。

整个项目的结构如下

package com.unisits.zngkpt.framework.logframe.bojo;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @author:lyy
* @Date: 2017/6/25 10:42
* @version:
* @Description:
*/
@Component
public class DateUtils {
private static String defaultDatePattern = "yyyy-MM-dd HH:mm:ss.SSS";

/**
* 获得默认的 date pattern
*/
public static String getDatePattern()
{
return defaultDatePattern;
}

/**
* 返回预设Format的当前日期字符串
*/
public static String getToday()
{
Date today = new Date();
return format(today);
}

/**
* 使用预设Format格式化Date成字符串
*/
public static String format(Date date)
{
return date == null ? " " : format(date, getDatePattern());
}

/**
* 使用参数Format格式化Date成字符串
*/
public static String format(Date date, String pattern)
{
return date == null ? " " : new SimpleDateFormat(pattern).format(date);
}

/**
* 使用预设格式将字符串转为Date
*/
public static Date parse(String strDate) throws ParseException
{
return StringUtils.isBlank(strDate) ? null : parse(strDate,
getDatePattern());
}

/**
* 使用参数Format将字符串转为Date
*/
public static Date parse(String strDate, String pattern)
throws ParseException
{
return StringUtils.isBlank(strDate) ? null : new SimpleDateFormat(
pattern).parse(strDate);
}

/**
* 在日期上增加数个整月
*/
public static Date addMonth(Date date, int n)
{
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, n);
return cal.getTime();
}

public static String getLastDayOfMonth(String year, String month)
{
Calendar cal = Calendar.getInstance();
// 年
cal.set(Calendar.YEAR, Integer.parseInt(year));
// 月,因为Calendar里的月是从0开始,所以要-1
// cal.set(Calendar.MONTH, Integer.parseInt(month) - 1);
// 日,设为一号
cal.set(Calendar.DATE, 1);
// 月份加一,得到下个月的一号
cal.add(Calendar.MONTH, 1);
// 下一个月减一为本月最后一天
cal.add(Calendar.DATE, -1);
return String.valueOf(cal.get(Calendar.DAY_OF_MONTH));// 获得月末是几号
}

public static Date getDate(String year, String month, String day)
throws ParseException
{
String result = year + "- "
+ (month.length() == 1 ? ("0 " + month) : month) + "- "
+ (day.length() == 1 ? ("0 " + day) : day);
return parse(result);
}

public static Date getCurrentDate()  throws ParseException{
String strNow = new SimpleDateFormat(getDatePattern()).format(new Date());
return new SimpleDateFormat(getDatePattern()).parse(strNow);
}
}


DateUtils
完成了,那么怎么告知spring容器我们有这个呢?那就是开启注解,该配置必须写在springmvc的配置文件,由于我们现在的方法切入点是在controller层,如果你定义在spring的配置文件里面,不会起作用。这牵扯到父子容器的问题。spring默认的主配置文件为父容器,springmvc为子容器,子容器可以使用父容器里面的配置信息,但是父容器却无法使用子容器的配置信息。

<!-- 加入Aspectj配置 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>


好的,现在注解就开启了,那么怎么在控制器里调用呢?

如下

@OperAnnotation(moduleName = "情报板页面",option = "打开")
@RequestMapping("/infoman")
public String QueryInfoRelease(){
return CommonLib.INFORELEASE_URL_DIR+"inforelease";
}


好的,这里基于注解开发的完成了。

更所详细的如下:

1,自定义注解

2,Aspect 切入点的匹配方式

3,本日志源码和jar包(因为这里有ActiveUser,自定义的类,主要用于shiro认证框架时保存的参数)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: