只需4步,自己搞个 Spring Boot Starter( 二 )


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;    }}


推荐阅读