spring+mybatis基于 AOP实现业务日志管理
2015-06-25 21:13
513 查看
最近在项目上用到了操作日志的相关,之前的解决方案就是自己写一个日志project,然后统一调用日志接口即可,这样方便自定义定制,因为有很多设备控制之类的都是需要确认一下的,但是,对数据的操作,比如,增删改查还用这个,就有点多余了,感觉太麻烦了,所以,想想有没有日志管理这样的框架可以调用,然后就想到了spring的AOP。
整个项目的结构如下
DateUtils
完成了,那么怎么告知spring容器我们有这个呢?那就是开启注解,该配置必须写在springmvc的配置文件,由于我们现在的方法切入点是在controller层,如果你定义在spring的配置文件里面,不会起作用。这牵扯到父子容器的问题。spring默认的主配置文件为父容器,springmvc为子容器,子容器可以使用父容器里面的配置信息,但是父容器却无法使用子容器的配置信息。
好的,现在注解就开启了,那么怎么在控制器里调用呢?
如下
好的,这里基于注解开发的完成了。
更所详细的如下:
1,自定义注解
2,Aspect 切入点的匹配方式
3,本日志源码和jar包(因为这里有ActiveUser,自定义的类,主要用于shiro认证框架时保存的参数)
整个项目的结构如下
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认证框架时保存的参数)
相关文章推荐
- maven中解决javax.servlet.jsp.PageContext cannot be resolved to a type
- Spring学习步骤-001
- <Java>FileStream的read方法
- JAVA文件读写流
- JAVA电子时钟
- Java中double类型数据的比较
- 反射练习
- Java基础 String split方法
- Myeclipse deploy 项目时 exploded archive模式 与 packaged archive模式区别
- MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer
- Myeclipse下的Struts 2 + Hibernate 的注册登录系统
- Struts2 奇怪的老是调用index方法
- Java I/O 详解
- Java 中的成员内部类(转载)
- Java命名规范
- SpringMVC将数据返回到页面
- JDK自带VM分析工具jps|jstat|jmap|jconsole使用
- Java设计模式
- java选择排序法
- 自娱自乐--爬虫java实践