使用@aspject进行aop加强处理,示例是相似于一个日志记录功能。java
package com.company.aspectj; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 注解生命周期-运行时 * 注解目标:方法 */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Log { String value() default ""; }
package com.company.aspectj; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Aspect public class LogAspectj { private static final Logger LOGGER = LoggerFactory.getLogger(LogAspectj.class); @AfterReturning(value = "@annotation(com.company.aspectj.Log)",returning = "ret") public void LogAfterReturning(JoinPoint joinPoint,Object ret){ Object[] args = joinPoint.getArgs(); LOGGER.info("方法入参:{}",args); LOGGER.info("返回值:{}",ret); } }
<!--@aspectj启动,子类代理--> <aop:aspectj-autoproxy proxy-target-class="true"/> <!--将定义aspectj扫入spring bean容器里(二选一)--> <context:component-scan base-package="com.company.aspectj"> <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/> </context:component-scan> <!--<bean id="logAspectj" class="com.company.aspectj.LogAspectj"/>-->
@RequestMapping("qryUserById") @ResponseBody @Log public User qryUserById(Long id) throws DemoException{ if(id == null){ throw new DemoException("id为空"); } return userService.qryUserById(id); }