java在jdk1.5中引入了注解一种原程序中的元素关联任何信息和任何元数据的途径和方法这就是注解。使用注解可以极大的简化我们的编程,便于代码维护。
首先自定义一个注解
@Target(ElementType.METHOD)//这个注解可以用在方法上面
@Retention(RetentionPolicy.RUNTIME)//注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
@Documented//表示该注解可生成文档
@Inherited//表示该注解可继承
public @interface LoggerAop {
public String value() default "";
}
写一个切面类,用于自定义日志
@Aspect//表示该类为一个切面类
@Component//@component组件扫描,让其 logService能注入进来
public class LoggerAspect {
private Logger logger = LoggerFactory.getLogger(LoggerAspect.class);
//切入的注解
@Around("@annotation(com.way.aop.LoggerAop)")
public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable{
Long start = System.currentTimeMillis();
Object obj = pjp.proceed();
logger.info(pjp.getTarget().getClass().getSimpleName()+"."+pjp.getSignature().getName()+" 花费时间 "+(System.currentTimeMillis()-start)+",运行结果 "+obj);
return obj;
}
}
使用入门实例的方法,在需要添加日志的地方加上注解
@LoggerAop
public double cos(double angle) {
return (new BigDecimal(Math.cos(angleToRandian(angle))).setScale(6, BigDecimal.ROUND_HALF_DOWN)).doubleValue();
}
测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test1 {
@Autowired
TrigonometricFunctionCal trigonometricFunctionCal;
@Test
public void MyTest() throws IOException, InterruptedException{
System.out.println(trigonometricFunctionCal.cos(60));;
}
}
运行结果