java之自定义注解实现日志管理

ssm版本:

1、首先自定义一个注解,该注解有两个属性,一个是模块名,一个是操作的内容。该注解是用来修饰Service层中的方法的。

2、创建一个切面类,该切面使用@Aspect和@Component注解修饰,该页面需要注入一个HttpSession对象。

注意:一个普通的java类是不能注入HttpSession对象的,因此需要在web.xml文件中配置

 
  
    org.springframework.web.util.IntrospectorCleanupListener
  
  
  
  
        org.springframework.web.context.request.RequestContextListener
 

3、在applicationContext.xml文件中配置aop:aspectj-autoproxy,扫描@Aspect注解。

springboot版本:

日志管理:
1、首先自定义一个注解,自定义的注解需要使用@Target(ElementType.METHOD),@Retention(RetentionPolicy.RUNTIME)修饰,然后给几个属性。
2、定义一个切面然后切面使用@Component,@Aspect修饰,然后定义扫描切入点表达式@After(“execution(* com.syzw.test..service..*(…))”),创建通知类型,通知类型里面可以使用 HttpServletRequest request=((ServletRequestAttributes)(RequestContextHolder.getRequestAttributes())).getRequest();去获取requet对象。
3、在该方法中就可以通过JoinPoint形参去获取实际操作对象的class类,然后就可以获取该到方法,然后可以获取到自定义的注解了就完成了日志的管理。

缺点:
如果需要进行比较信息的日志管理的话,需要在每一个操作dao接口的方法上添加自定义的注解,较为麻烦。
解决方式:
一般会在切面上判断url然后根据url去做相应的操作的,但是这种操作较不灵活。



JoinPoint是一个切入点,它封装了切入点和真实对象的一些信息。
JoinPoint常用的一些api:
getSignature():获取真实访问方法的全路径签名。
getArgs():获取传入目标方法的参数对象。
getTarget():获取被代理的对象。
getThis():获取代理对象。

Signature:
getName():获取操作的方法名。
getClass():获取方法所在的Class类。

注意:

其实每一个注解都对应了一个切面,注解只是其一个声明作用,并没有实际的意义。

你可能感兴趣的:(java)