17 0017:11:06 * 邮箱:1981462002@qq.com * 说明:AOP+log4j 记录访问请求信息 */ @Aspect @Component public class LogAspect...{ private static final Logger sLogger = Logger.getLogger(LogAspect.class); /** * 拦截com.toly1994...name=赤凰 12:04:39,451 INFO LogAspect:46 - url/findByName 12:04:39,453 INFO LogAspect:47 - methodGET...12:04:39,454 INFO LogAspect:48 - ip0:0:0:0:0:0:0:1 12:04:39,455 INFO LogAspect:53 - name:name,value...:{赤凰} 12:04:39,460 INFO LogAspect:60 - responseSword(id=24, name=赤凰, atk=0, hit=100, crit=5, attr_id
$Proxy13 ------ LogAspect div 方法 Around通知,入参:[20, 10] ------ ====== 执行 div 方法 ====== -...----- LogAspect div 方法 Around通知,执行结束 ------ ------ LogAspect div 方法 Around通知,返回结果:2 ------...$Proxy13 ------ LogAspect div 方法 Around通知,入参:[20, 0] ------ ====== 执行 div 方法 ====== --...---- LogAspect div 方法 Around通知,执行异常信息:/ by zero ------ ------ LogAspect div 方法 Around通知,执行结束 ---...div 方法 Around通知,入参:[20, 10] ------ ------ LogAspect div 方法 Around通知,执行结束 ------ ------ LogAspect
因为日志一般会记录在文件,有的还会记录在数据库,不是打印在控制台上就完事了 那我们做的项目来说吧,一般日志会分为三种,用户的登录日志,用户的操作日志,用户的浏览日志,都是分开存储的 创建aspect包,并创建LogAspect...LogAspect.java package com.springboot.demo.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning...javax.servlet.http.HttpServletRequest; import java.util.Enumeration; /** * @author ZYGisComputer */ @Aspect @Component public class LogAspect...{ private static final Logger logger = LoggerFactory.getLogger(LogAspect.class); /** *
:38)- HTTP_METHOD : GET 2021-01-26 18:19:01,341 [http-nio-8082-exec-3] INFO (LogAspect.java:39)- IP :...:50)- RESPONSE : 用户注册成功 2021-01-26 18:19:01,922 [http-nio-8082-exec-4] INFO (LogAspect.java:37)- URL...: http://localhost:8082/addDB 2021-01-26 18:19:01,922 [http-nio-8082-exec-4] INFO (LogAspect.java:38)...- HTTP_METHOD : GET 2021-01-26 18:19:01,923 [http-nio-8082-exec-4] INFO (LogAspect.java:39)- IP : 0:0...:38)- HTTP_METHOD : GET 2021-01-26 18:19:02,559 [http-nio-8082-exec-2] INFO (LogAspect.java:39)- IP :
6 import org.springframework.context.annotation.EnableAspectJAutoProxy; 7 8 import com.bie.aop.LogAspect...26 * 第三步、定义一个日志切面类LogAspect,切面类里面的方法需要动态感知到类的方法MathCalculator.div运行到那一步了。然后开始执行。...60 /** 61 * 将切面类加入到容器中 62 * 63 * @return 64 */ 65 @Bean 66 public LogAspect...logAspect() { 67 return new LogAspect(); 68 } 69 70 } 开发业务逻辑层类,如下所示: 1 package com.bie.aop...version V1.0 22 * 23 * 日志切面类 24 */ 25 @Aspect // 告诉Spring容器,当前类是切面类 26 public class LogAspect
/** * @ClassName: LogAspect * @Description: 日志记录AOP实现 */ @Component @Aspect public class LogAspect...{ private final static Logger logger = LoggerFactory.getLogger(LogAspect.class); @Pointcut("execution
切面类,在LogAspect类中定义了几个打印日志的方法,以这些方法来感知MathHandler类中的add()方法的运行情况。...综上,LogAspect类中的具体方法定义如下所示。...在AopConfig类中,使用@Bean注解将MathHandler类和LogAspect类加入到IOC容器中,如下所示。...logAspect(){ return new LogAspect(); } } 5.创建测试类 在 io.mykit.spring.test包中创建AopTest测试类,并在...要想打印出参数列表和运行结果,就需要对LogAspect类中的方法进行优化,优化后的结果如下所示。
--配置切面--> ...--后置通知,无论业务是否正常执行--> ...--正常执行--> -
编写一个切面类 `LogAspect`,用来拦截被 `@Log` 注解标注的方法,并记录相应的日志。...@Component @Aspect public class LogAspect { private static final Logger LOG = LoggerFactory.getLogger...(LogAspect.class); /** * 拦截被 @Log 注解标注的方法,并记录相应的日志 */ @Around("@annotation(com.example.demo.annotation.Log
public void doSOmeThing() { System.out.println("do some …"); } } Aspect切面 public class LogAspect...object; } } <!
新建一个切面类 新建类LogAspect,完整代码如下: package com.dalaoyang.aspect; import org.aspectj.lang.JoinPoint; import...public void LogAspect(){} @Before("LogAspect()") public void doBefore(JoinPoint joinPoint){...System.out.println("doBefore"); } @After("LogAspect()") public void doAfter(JoinPoint...joinPoint){ System.out.println("doAfter"); } @AfterReturning("LogAspect()") public...deAfterThrowing(JoinPoint joinPoint){ System.out.println("deAfterThrowing"); } @Around("LogAspect
org.slf4j.LoggerFactory; import java.util.Date; /** * 日志切面 */ @Component @Aspect // 标注为切面 public class LogAspect...this.getClass()); // 切入点表达式,表示切入点为控制器包中的所有方法 @Pointcut("within(com.item.controller..*)") public void LogAspect...() { } // 切入点之前执行 @Before("LogAspect()") public void doBefore(JoinPoint joinPoint) { logger.info
implements InvocationHandler { private Object target; public LogAspect(Object target) {...args) { UserService target = new UserServiceImpl(); InvocationHandler handler = new LogAspect...new Enhancer(); enhancer.setSuperclass(UserService.class); enhancer.setCallback(new LogAspect...@Aspect @Component public class LogAspect { @Pointcut("execution(* com.example.service.*.*(..))"...@Aspect @Component public class LogAspect { @Around("@annotation(com.example.annotation.Log)")
; return "hello"; } } 然后创建一个切面: @Aspect @Component public class LogAspect { /**...二、通知类型 总共支持五种通知类型: @Aspect @Component public class LogAspect { /** * 前置通知 * 在方法执行之前执行...其实可以在切面类中先定义一个切点表达式,然后其它通知定义的时候引用这个切点表达式即可: @Aspect @Component public class LogAspect { /**...@Aspect @Component public class LogAspect { @Pointcut("@annotation(com.example.aopdemo.annotation.AspectAction
* 日志切面 */ @Aspect @Component public class LogAspect { private Logger logger = LoggerFactory.getLogger...,并传参 可以看到控制台日志: 2017-08-08 17:11:52.603 INFO 89159 --- [nio-8080-exec-1] com.tianyalei.testelk.aop.LogAspect...--------------- 2017-08-08 17:11:52.604 INFO 89159 --- [nio-8080-exec-1] com.tianyalei.testelk.aop.LogAspect...0:0:0:0:0:0:0:1 2017-08-08 17:11:52.607 INFO 89159 --- [nio-8080-exec-1] com.tianyalei.testelk.aop.LogAspect...方法的返回值 : success 2017-08-08 17:11:52.613 INFO 89159 --- [nio-8080-exec-1] com.tianyalei.testelk.aop.LogAspect
LogAspect中带注解@Pointcut的allMethod(),是用来扫描程序中的连接点。当执行一个方法时,命中了连接点,则会根据不同的通知,执行对应的织入代码。...在上面例子中,执行getStr()前会执行LogAspect中的before(),执行getStr()后会执行LogAspect中的after()。...例子中,LogAspect就是切面。 JoinPoint, 连接点,程序执行中的某个点,某个位置。 例子中,testBean.getStr()是连接点。...示例中,LogAspect就是AspectBean,然后LogAspect中的before和after方法就是Advisor。...所以最终返回了LogAspect中的Advisor(before和after)。 创建代理 拿到了所有的Advisor后,就进入了创建代理的流程了createProxy()。 ?
定义一个LogAspect切面类,通过实现@Aspect注解和@Before注解来实现方法拦截: @Aspect @Component public class LogAspect { @Autowired...public void logAspect() {} @Before("logAspect()") public void doBefore(JoinPoint joinPoint)...LogAspect.logAspect()方法:定义AOP切入点,拦截Controller类中的所有方法。...LogAspect.doBefore(JoinPoint joinPoint)方法:执行方法拦截操作,并调用LogInterceptor.preHandle方法来记录日志。
dependencies> 完成依赖导入后,我们编写一个切面类: /** * 定义一个日志切面 */ @Aspect @Component // 切面不是Bean,需要添加注解 public class LogAspect...{ private static final Logger LOGGER = LoggerFactory.getLogger(LogAspect.class); /** *...API调用,可以看到输出: 2021-08-09 16:42:46.494 INFO 18528 --- [nio-8080-exec-2] c.c.guide.chapter04_05.aspect.LogAspect...发生请求:/books/1 2021-08-09 16:42:46.495 INFO 18528 --- [nio-8080-exec-2] c.c.guide.chapter04_05.aspect.LogAspect...处理耗时:502 ms 2021-08-09 16:42:47.004 INFO 18528 --- [nio-8080-exec-2] c.c.guide.chapter04_05.aspect.LogAspect
LogAspect 日志记录组件,实现对com.ywsc.fenfenzhong.aspectj.learn.SayHelloService 后置增强 package com.ywsc.fenfenzhong.aspectj.learn...; public aspect LogAspect { pointcut logPointcut():execution(void SayHelloService.say()); after...SayHelloService.java LogAspect.java 生成 SayHelloService.class 执行命令 java SayHelloService 输出 Hello AspectJ...org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Aspect @Component public class LogAspect
领取专属 10元无门槛券
手把手带您无忧上云