利用Spring AOP进行日志管理
本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:
- 注解类BussAnnotation
- 方式1:XML配置方式
- 方式2:代码配置方式
- 使用
- 结果
注解类BussAnnotation
@Target({ ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface BussAnnotation
{
// 模块名
String moduleName() default "";
// 操作内容
String option() default "";
}
方式1:XML配置方式
提示:若想要AOP切面在controller层,必须要在spring-servlet.xml中配置
<aop:aspectj-autoproxy />
<bean id="logUtil" class="com.asb.farmermarket.util.LogUtilForXml"></bean>
<!-- 强制使用cglib代理,如果不设置,将默认使用jdk的代理,但是jdk的代理是基于接口的 -->
<aop:config proxy-target-class="true" />
<aop:config>
<aop:aspect id="myAspect" ref="logUtil">
<aop:pointcut id="logPointCut" expression="execution(* com.asb.farmermarket.controller..*.*(..)) and @annotation(annotation) and args(object,..)" />
<aop:before method="before" pointcut-ref="logPointCut" arg-names="annotation,object"/>
</aop:aspect>
</aop:config>
LogUtilForXml.java
public class LogUtilForXml
{
Logger logger = Logger.getLogger(LogUtilForXml.class);
public void before(JoinPoint jp, BussAnnotation annotation, Object object)
{
logger.info("======moduleName:" + annotation.moduleName());
logger.info("======option:" + annotation.option());
String methodName = jp.getSignature().getName();
logger.info(jp.getTarget().getClass().getName() + "---" + methodName);
Object[] args = jp.getArgs();
for(int i = 0;i<args.length;i++)
{
if (args[i] != null)
logger.info("params[" + i + "]" + args[i].toString());
}
}
}
方式2:代码配置方式
<context:component-scan base-package="com.asb.farmermarket.util"/>
<aop:aspectj-autoproxy />
@Aspect
@Component
public class LogUtilForCode
{
Logger logger = Logger.getLogger(LogUtilForCode.class);
@Pointcut(value = "execution(* com.asb.farmermarket.controller..*.*(..))")
public void pointcut1()
{
}
@Before(value = "pointcut1() && @annotation(annotation) && args(object,..) ", argNames = "annotation,object")
public void before(JoinPoint jp, BussAnnotation annotation, Object object) throws Throwable
{
logger.info("======moduleName:" + annotation.moduleName());
logger.info("======option:" + annotation.option());
String methodName = jp.getSignature().getName();
logger.info(jp.getTarget().getClass().getName() + "---" + methodName);
Object[] args = jp.getArgs();
for(int i = 0;i<args.length;i++)
{
if (args[i] != null)
logger.info("params[" + i + "]" + args[i].toString());
}
}
}
使用
@BussAnnotation(moduleName="经营户管理", option="经营户备案查询")
@RequestMapping("findList")
@ResponseBody
public Object findList(HttpServletRequest request, BaseBusinessInfo entity, Pager pager, String businessType2)