Property Conditions环境变量条件注解(含配置文件)@ConditionalOnPropertyprefix 前缀name 名称havingValue 用于匹配配置项值matchIfMissing 没找指定配置项时的默认值ResourceConditions 资源条件注解@ConditionalOnResource有指定资源才加载Web Application Conditionsweb条件注解@ConditionalOnWebApplication是web才加载@ConditionalOnNotWebApplication不是web才加载
SpEL Expression Conditions@ConditionalOnExpression符合SpEL 表达式才加载
本次我们就选用@ConditionalOnProperty 。即配置文件中有aspectLog.enable=true,才加载我们的配置类 。
下面开始写自动配置类
2.1.定义AspectLog注解,该注解用于标注需要打印执行时间的方法 。package com.shanyuan.autoconfiguration.aspectlog;import JAVA.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * class_name: ScheduleManage * describe: 用于控制定时任务的开启与关闭 * 对应切面 * creat_user: wenl * creat_time: 2018/11/10 18:45 **/@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface AspectLog {}
2.2定义配置文件对应类package com.shanyuan.autoconfiguration.aspectlog;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties("aspectLog")public class AspectLogProperties { private boolean enable; public boolean isEnable() { return enable; } public void setEnable(boolean enable) { this.enable = enable; }}
2.3定义自动配置类package com.shanyuan.autoconfiguration.aspectlog;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.autoconfigure.condition.*;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.EnableAspectJAutoProxy;import org.springframework.core.PriorityOrdered;@Aspect@EnableAspectJAutoProxy(exposeProxy = true, proxyTargetClass = true)@Configuration@ConditionalOnProperty(prefix = "aspectLog", name = "enable", havingValue = "true", matchIfMissing = true)public class AspectLogAutoConfiguration implements PriorityOrdered { protected Logger logger = LoggerFactory.getLogger(getClass());@Around("@annotation(com.shanyuan.autoconfiguration.aspectlog.AspectLog) ") public Object isOpen(ProceedingJoinPoint thisJoinPoint) throws Throwable { //执行方法名称 String taskName = thisJoinPoint.getSignature() .toString().substring( thisJoinPoint.getSignature() .toString().indexOf(" "), thisJoinPoint.getSignature().toString().indexOf("(")); taskName = taskName.trim(); long time = System.currentTimeMillis(); Object result = thisJoinPoint.proceed(); logger.info("method:{} run :{} ms", taskName, (System.currentTimeMillis() - time)); return result; } @Override public int getOrder() { //保证事务等切面先执行 return Integer.MAX_VALUE; }}
推荐阅读
- 姜茶怎么煮好喝,自己怎么做黑糖姜茶
- 冬季皮肤瘙痒怎么办 只需7招让你远离烦恼
- 旅行|40多岁的我终于明白,人生就是一场自己跟自己的旅行,不需要朋友
- 不花一分钱,轻松实现网站漏洞扫描,只需几分钟即可出具报告
- |人在职场,别人的屋檐再大,都不如自己有把伞,职场人心里要有数
- 花生果茶制作技术,自己如何制作水果茶
- 汽车|轿车遮挡号牌加油524元后逃单 网友:真以为自己能跑掉
- 我喜欢的小动物30个字 写一个自己喜欢的动物30字
- 人能意识到自己的死亡 人死了人的意识还有没有
- 基本的茶具有哪些,选择适合自己的那杯花草茶