{"id":910,"date":"2020-11-20T18:30:30","date_gmt":"2020-11-20T10:30:30","guid":{"rendered":"http:\/\/prayerlaputa.com\/?p=910"},"modified":"2020-11-20T23:17:43","modified_gmt":"2020-11-20T15:17:43","slug":"spring-%e8%87%aa%e5%ae%9a%e4%b9%89%e6%b3%a8%e8%a7%a3%e6%97%b6%e4%bd%bf%e7%94%a8aliasfor%e6%b3%a8%e8%a7%a3%e5%88%ab%e5%90%8d%e6%97%b6-%e9%bb%98%e8%ae%a4%e5%80%bc%e6%97%a0%e6%b3%95%e8%a2%ab%e8%a6%86","status":"publish","type":"post","link":"http:\/\/prayerlaputa.com\/?p=910","title":{"rendered":"spring \u81ea\u5b9a\u4e49\u6ce8\u89e3\u65f6\u4f7f\u7528AliasFor\u6ce8\u89e3\u522b\u540d\u65f6 \u9ed8\u8ba4\u503c\u65e0\u6cd5\u88ab\u8986\u76d6"},"content":{"rendered":"<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u4e8b\u60c5\u662f\u8fd9\u6837\u5b50\u7684\uff1a<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u6211\u60f3\u81ea\u5b9a\u4e49\u4e00\u4e2a\u7f13\u5b58\u6ce8\u89e3\uff0c\u7528\u6765\u7f13\u5b58\u65b9\u6cd5\u8fd4\u56de\u503c\uff0c\u5e76\u4e14\u652f\u6301\u81ea\u5b9a\u4e49\u7f13\u5b58\u8d85\u65f6\u65f6\u95f4\uff0c\u6ce8\u89e3\u5b9a\u4e49\u662f\u8fd9\u6837\uff1a<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" lang=\"java\" spellcheck=\"false\"><span role=\"presentation\">\u200b<\/span>\r\n<span role=\"presentation\"><span class=\"cm-meta\">@Retention<\/span>(<span class=\"cm-variable\">RetentionPolicy<\/span>.<span class=\"cm-variable\">RUNTIME<\/span>)<\/span>\r\n<span role=\"presentation\"><span class=\"cm-meta\">@Target<\/span>(<span class=\"cm-variable\">ElementType<\/span>.<span class=\"cm-variable\">METHOD<\/span>)<\/span>\r\n<span role=\"presentation\"><span class=\"cm-meta\">@Inherited<\/span><\/span>\r\n<span role=\"presentation\"><span class=\"cm-keyword\">public<\/span> <span class=\"cm-keyword\">@interface<\/span> <span class=\"cm-def\">MyCache<\/span> {<\/span>\r\n<span role=\"presentation\">\u200b<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-meta\">@AliasFor<\/span>(<span class=\"cm-string\">\"value\"<\/span>)<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-variable-3\">int<\/span> <span class=\"cm-variable\">expireTime<\/span>() <span class=\"cm-keyword\">default<\/span> <span class=\"cm-number\">60<\/span>;<\/span>\r\n<span role=\"presentation\">\u200b<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-meta\">@AliasFor<\/span>(<span class=\"cm-string\">\"expireTime\"<\/span>)<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-variable-3\">int<\/span> <span class=\"cm-variable\">value<\/span>() <span class=\"cm-keyword\">default<\/span> <span class=\"cm-number\">60<\/span>;<\/span>\r\n<span role=\"presentation\">}<\/span><\/pre>\n<p><!--more--><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u672c\u6765\u53ea\u60f3\u5199\u4e00\u4e2aexpireTime\uff0c\u4f46\u60f3\u7740\u5927\u5bb6\u80af\u5b9a\u80fd\u5077\u61d2\u5c3d\u91cf\u5077\u61d2\u561b\uff0c\u90a3\u6700\u597d\u8fd8\u662f\u652f\u6301 <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>@MyCache(50)<\/code><\/span><span class=\"md-plain\"> \u8fd9\u79cd\u5199\u6cd5\u3001\u7701\u53bb\u4e00\u6b65\u3002\u4e8e\u662f\u4e5f\u6709\u4e86\u4e0a\u9762\u7684\u5199\u6cd5\uff0c\u4f7f\u7528spring\u63d0\u4f9b\u7684<\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>@AliasFor<\/code><\/span><span class=\"md-plain\">\uff0c\u663e\u5f0f\u7684\u5b9a\u4e49\u4e24\u4e2a\u5c5e\u6027\u4e92\u4e3a\u522b\u540d\uff0c\u76ee\u7684\u5c31\u662f\u5982\u679c\u4e0d\u5728\u6ce8\u89e3\u4e2d\u6307\u5b9a\u5c5e\u6027\uff0c\u5219\u9ed8\u8ba4\u5c31\u662f\u5c06\u503c\u7ed9\u5230\u8d85\u65f6\u65f6\u95f4expireTime\u3002<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u8fd9\u6837\u5199\u4e5f\u662f\u770b\u4e86spring\u91cc<\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>@Transactional<\/code><\/span><span class=\"md-plain\">\u6ce8\u89e3\u7684\u5b9a\u4e49\uff0c\u6309\u9053\u7406\uff0c\u5e94\u8be5\u662f\u6211\u914d\u7f6e\u4e86 <\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>@MyCache(50)<\/code><\/span><span class=\"md-plain\"> \u540e\uff0c\u6211\u5728Advice\u4ee3\u7801\u4e2d\u53d6\u8fd9\u4e2a\u6ce8\u89e3\u7684<\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>expireTime<\/code><\/span><span class=\"md-plain\">\u5c5e\u6027\u503c\u65f6\uff0c\u5e94\u8be5\u662f\u62ff\u5230<\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>value<\/code><\/span><span class=\"md-plain\">\u7684\u503c\uff0c\u537350\uff0c\u4f46\u5b9e\u9645\u6548\u679c\u5374\u4e0d\u662f\u8fd9\u6837\uff0c<\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>expireTime<\/code><\/span><span class=\"md-plain\">\u7684\u503c\u4ecd\u4e3a\u9ed8\u8ba4\u768460\u3002<\/span><\/p>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u800c\u6211\u53d6\u503c\u7684\u4ee3\u7801\u5982\u4e0b\uff1a<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" lang=\"java\" spellcheck=\"false\"><span role=\"presentation\"><span class=\"cm-meta\">@Around<\/span>(<span class=\"cm-string\">\"myCache()\"<\/span>)<\/span>\r\n<span role=\"presentation\"><span class=\"cm-keyword\">public<\/span> <span class=\"cm-variable-3\">Object<\/span> <span class=\"cm-def\">around<\/span>(<span class=\"cm-variable\">ProceedingJoinPoint<\/span> <span class=\"cm-variable\">pjp<\/span>) {<\/span>\r\n<span role=\"presentation\"> \u00a0  ......<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-comment\">\/\/\u83b7\u53d6\u65b9\u6cd5\u5bf9\u8c61<\/span><\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-variable\">Method<\/span> <span class=\"cm-variable\">curMethod<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable\">getMethodByJoinPoint<\/span>(<span class=\"cm-variable\">pjp<\/span>, <span class=\"cm-variable\">methodSignature<\/span>);<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-comment\">\/\/\u51fa\u95ee\u9898\u7684\u662f\u8fd9\u4e00\u53e5\uff01<\/span><\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-variable\">Annotation<\/span> <span class=\"cm-variable\">annotation<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable\">curMethod<\/span>.<span class=\"cm-variable\">getAnnotation<\/span>(<span class=\"cm-variable\">MyCache<\/span>.<span class=\"cm-keyword\">class<\/span>);<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-variable-3\">Integer<\/span> <span class=\"cm-variable\">expireTime<\/span> <span class=\"cm-operator\">=<\/span> (<span class=\"cm-variable-3\">Integer<\/span>) <span class=\"cm-variable\">getAnnotationConfig<\/span>(<span class=\"cm-variable\">annotation<\/span>, <span class=\"cm-string\">\"expireTime\"<\/span>);<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-variable-3\">Integer<\/span> <span class=\"cm-variable\">annotationValue<\/span> <span class=\"cm-operator\">=<\/span> (<span class=\"cm-variable-3\">Integer<\/span>) <span class=\"cm-variable\">getAnnotationConfig<\/span>(<span class=\"cm-variable\">annotation<\/span>, <span class=\"cm-string\">\"value\"<\/span>);<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-variable\">log<\/span>.<span class=\"cm-variable\">info<\/span>(<span class=\"cm-string\">\"annotationValue={}, expireTime={}.\"<\/span>, <span class=\"cm-variable\">annotationValue<\/span>, <span class=\"cm-variable\">expireTime<\/span>);<\/span>\r\n<span role=\"presentation\"> \u00a0  ......<\/span>\r\n<span role=\"presentation\">}<\/span>\r\n<span role=\"presentation\">\u200b<\/span>\r\n<span role=\"presentation\"><span class=\"cm-keyword\">private<\/span> <span class=\"cm-variable\">Method<\/span> <span class=\"cm-def\">getMethodByJoinPoint<\/span>(<span class=\"cm-variable\">ProceedingJoinPoint<\/span> <span class=\"cm-variable\">pjp<\/span>, <span class=\"cm-variable\">MethodSignature<\/span> <span class=\"cm-variable\">methodSignature<\/span>) <span class=\"cm-keyword\">throws<\/span> <span class=\"cm-variable\">NoSuchMethodException<\/span> {<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-variable-3\">Object<\/span> <span class=\"cm-variable\">target<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable\">pjp<\/span>.<span class=\"cm-variable\">getTarget<\/span>();<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">target<\/span>.<span class=\"cm-variable\">getClass<\/span>().<span class=\"cm-variable\">getMethod<\/span>(<span class=\"cm-variable\">methodSignature<\/span>.<span class=\"cm-variable\">getName<\/span>(), <span class=\"cm-variable\">methodSignature<\/span>.<span class=\"cm-variable\">getParameterTypes<\/span>());<\/span>\r\n<span role=\"presentation\">}<\/span>\r\n<span role=\"presentation\">\u200b<\/span>\r\n<span role=\"presentation\"><span class=\"cm-keyword\">private<\/span> <span class=\"cm-variable-3\">Object<\/span> <span class=\"cm-def\">getAnnotationConfig<\/span>(<span class=\"cm-variable\">Annotation<\/span> <span class=\"cm-variable\">annotation<\/span>, <span class=\"cm-variable-3\">String<\/span> <span class=\"cm-variable\">name<\/span>) {<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-keyword\">if<\/span> (<span class=\"cm-atom\">null<\/span> <span class=\"cm-operator\">==<\/span> <span class=\"cm-variable\">annotation<\/span> <span class=\"cm-operator\">||<\/span> <span class=\"cm-variable\">StringUtils<\/span>.<span class=\"cm-variable\">isEmpty<\/span>(<span class=\"cm-variable\">name<\/span>)) {<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0 \u00a0 \u00a0<span class=\"cm-keyword\">return<\/span> <span class=\"cm-atom\">null<\/span>;<\/span>\r\n<span role=\"presentation\"> \u00a0  }<\/span>\r\n<span role=\"presentation\">\u200b<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-keyword\">try<\/span> {<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0 \u00a0 \u00a0<span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">annotation<\/span>.<span class=\"cm-variable\">annotationType<\/span>().<span class=\"cm-variable\">getMethod<\/span>(<span class=\"cm-variable\">name<\/span>).<span class=\"cm-variable\">invoke<\/span>(<span class=\"cm-variable\">annotation<\/span>);<\/span>\r\n<span role=\"presentation\"> \u00a0  } <span class=\"cm-keyword\">catch<\/span> (<span class=\"cm-variable\">NoSuchMethodException<\/span> <span class=\"cm-operator\">|<\/span> <span class=\"cm-variable\">IllegalAccessException<\/span> <span class=\"cm-operator\">|<\/span> <span class=\"cm-variable\">InvocationTargetException<\/span> <span class=\"cm-variable\">e<\/span>) {<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0 \u00a0 \u00a0<span class=\"cm-variable\">log<\/span>.<span class=\"cm-variable\">error<\/span>(<span class=\"cm-string\">\"getAnnotationConfig error:\"<\/span>, <span class=\"cm-variable\">e<\/span>);<\/span>\r\n<span role=\"presentation\"> \u00a0  }<\/span>\r\n<span role=\"presentation\">\u200b<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-keyword\">return<\/span> <span class=\"cm-atom\">null<\/span>;<\/span>\r\n<span role=\"presentation\">}<\/span><\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u83b7\u53d6\u6ce8\u89e3\u8fd9\u4e00\u6b65\u6709\u95ee\u9898\uff0c<\/span><span class=\"md-pair-s\" spellcheck=\"false\"><code>@AliasFor<\/code><\/span><span class=\"md-plain\">\u662fspring\u63d0\u4f9b\u7684\u6ce8\u89e3\uff0c\u60f3\u8981\u4fdd\u8bc1\u83b7\u53d6\u5c5e\u6027\u503c\u80fd\u611f\u77e5\u5230\uff0c\u9700\u8981\u4f7f\u7528spring\u63d0\u4f9b\u7684\u5de5\u5177\u65b9\u6cd5\u83b7\u5f97\u6ce8\u89e3\uff0c\u5982\u4e0b\u6240\u793a\uff1a<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" lang=\"java\" spellcheck=\"false\"><span role=\"presentation\">......<\/span>\r\n<span role=\"presentation\"><span class=\"cm-variable\">Annotation<\/span> <span class=\"cm-variable\">annotation2<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-variable\">AnnotationUtils<\/span>.<span class=\"cm-variable\">getAnnotation<\/span>(<span class=\"cm-variable\">curMethod<\/span>, <span class=\"cm-variable\">MyCache<\/span>.<span class=\"cm-keyword\">class<\/span>);<\/span>\r\n<span role=\"presentation\"><span class=\"cm-variable-3\">Integer<\/span> <span class=\"cm-variable\">annotationVal2<\/span> <span class=\"cm-operator\">=<\/span> (<span class=\"cm-variable-3\">Integer<\/span>) <span class=\"cm-variable\">getAnnotationConfig<\/span>(<span class=\"cm-variable\">annotation2<\/span>, <span class=\"cm-string\">\"expireTime\"<\/span>);<\/span>\r\n<span role=\"presentation\"><span class=\"cm-variable\">log<\/span>.<span class=\"cm-variable\">info<\/span>(<span class=\"cm-string\">\"annotationVal2={}.\"<\/span>, <span class=\"cm-variable\">annotationVal2<\/span>);<\/span>\r\n<span role=\"presentation\">......<\/span><\/pre>\n<h3 class=\"md-end-block md-heading\"><span class=\"md-plain\">\u8fdb\u4e00\u6b65\u5ef6\u4f38\uff1a\u5982\u679c\u6ce8\u89e3\u91cc\u7684\u4e24\u4e2a\u5c5e\u6027\u76f8\u4e92\u52a0\u522b\u540d\u540e\uff0c\u4f7f\u7528\u6ce8\u89e3\u65f6\u4e24\u4e2a\u90fd\u8bbe\u7f6e\u4e86\u503c\uff0c\u4f1a\u600e\u6837\uff1f<\/span><\/h3>\n<p class=\"md-end-block md-p\"><span class=\"md-plain\">\u7c7b\u4f3c\u8fd9\u6837\uff1a<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" lang=\"java\" spellcheck=\"false\"><span role=\"presentation\"><span class=\"cm-meta\">@MyCache<\/span>(<span class=\"cm-variable\">expireTime<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-number\">40<\/span>, <span class=\"cm-variable\">value<\/span> <span class=\"cm-operator\">=<\/span> <span class=\"cm-number\">50<\/span>)<\/span>\r\n<span role=\"presentation\"><span class=\"cm-keyword\">public<\/span> <span class=\"cm-variable-3\">String<\/span> <span class=\"cm-def\">getValByCache<\/span>(<span class=\"cm-variable-3\">String<\/span> <span class=\"cm-variable\">key<\/span>) {<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-variable\">log<\/span>.<span class=\"cm-variable\">info<\/span>(<span class=\"cm-string\">\"getValByCache running...\"<\/span>);<\/span>\r\n<span role=\"presentation\"> \u00a0 \u00a0<span class=\"cm-keyword\">return<\/span> <span class=\"cm-variable\">key<\/span> <span class=\"cm-operator\">+<\/span> <span class=\"cm-string\">\"-\"<\/span> <span class=\"cm-operator\">+<\/span> <span class=\"cm-variable\">idx<\/span>.<span class=\"cm-variable\">incrementAndGet<\/span>();<\/span>\r\n<span role=\"presentation\">}<\/span><\/pre>\n<p class=\"md-end-block md-p\"><span class=\"md-pair-s \"><strong><span class=\"md-plain\">\u7a0b\u5e8f\u76f4\u63a5\u65e0\u6cd5\u542f\u52a8\uff01<\/span><\/strong><\/span><span class=\"md-plain\">\u4f1a\u62a5\u5982\u4e0b\u5f02\u5e38\uff1a<\/span><\/p>\n<pre class=\"md-fences md-end-block ty-contain-cm modeLoaded\" lang=\"text\" spellcheck=\"false\"><span role=\"presentation\">......<\/span>\r\n<span role=\"presentation\">2020-11-20 16:54:18.628  INFO 12076 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'<\/span>\r\n<span role=\"presentation\">2020-11-20 16:54:18.878  WARN 12076 --- [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\\GitRepository\\framework-dev-learning\\spring-aop-2-customzed-cache-annotation\\target\\classes\\com\\prayerlaputa\\service\\MyCacheDemoService.class]; nested exception is org.springframework.core.annotation.AnnotationConfigurationException: Different @AliasFor mirror values for annotation [com.prayerlaputa.annotation.MyCache] declared on com.prayerlaputa.service.MyCacheDemoService.getValByCache(java.lang.String); attribute 'expireTime' and its alias 'value' are declared with values of [40] and [50].<\/span>\r\n<span role=\"presentation\">2020-11-20 16:54:18.945 ERROR 12076 --- [  restartedMain] o.s.boot.SpringApplication \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 : Application run failed<\/span>\r\n<span role=\"presentation\">\u200b<\/span>\r\n<span role=\"presentation\">org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\\GitRepository\\framework-dev-learning\\spring-aop-2-customzed-cache-annotation\\target\\classes\\com\\prayerlaputa\\service\\MyCacheDemoService.class]; nested exception is org.springframework.core.annotation.AnnotationConfigurationException: Different @AliasFor mirror values for annotation [com.prayerlaputa.annotation.MyCache] declared on com.prayerlaputa.service.MyCacheDemoService.getValByCache(java.lang.String); attribute 'expireTime' and its alias 'value' are declared with values of [40] and [50].<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:452) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:315) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:276) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:132) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:295) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:249) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:206) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:174) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:319) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:706) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]<\/span>\r\n<span role=\"presentation\">    at com.prayerlaputa.SpringAopApplication.main(SpringAopApplication.java:10) [classes\/:na]<\/span>\r\n<span role=\"presentation\">    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_161]<\/span>\r\n<span role=\"presentation\">    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_161]<\/span>\r\n<span role=\"presentation\">    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_161]<\/span>\r\n<span role=\"presentation\">    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_161]<\/span>\r\n<span role=\"presentation\">    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.2.6.RELEASE.jar:2.2.6.RELEASE]<\/span>\r\n<span role=\"presentation\">Caused by: org.springframework.core.annotation.AnnotationConfigurationException: Different @AliasFor mirror values for annotation [com.prayerlaputa.annotation.MyCache] declared on com.prayerlaputa.service.MyCacheDemoService.getValByCache(java.lang.String); attribute 'expireTime' and its alias 'value' are declared with values of [40] and [50].<\/span>\r\n<span role=\"presentation\">    at org.springframework.core.annotation.AnnotationTypeMapping$MirrorSets$MirrorSet.resolve(AnnotationTypeMapping.java:656) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.core.annotation.AnnotationTypeMapping$MirrorSets.resolve(AnnotationTypeMapping.java:611) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.core.annotation.TypeMappedAnnotation.&lt;init&gt;(TypeMappedAnnotation.java:136) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.core.annotation.TypeMappedAnnotation.&lt;init&gt;(TypeMappedAnnotation.java:120) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.core.annotation.TypeMappedAnnotation.of(TypeMappedAnnotation.java:636) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.core.annotation.MergedAnnotation.of(MergedAnnotation.java:596) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.core.type.classreading.MergedAnnotationReadingVisitor.visitEnd(MergedAnnotationReadingVisitor.java:96) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.asm.ClassReader.readElementValues(ClassReader.java:2985) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.asm.ClassReader.readMethod(ClassReader.java:1393) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.asm.ClassReader.accept(ClassReader.java:718) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.asm.ClassReader.accept(ClassReader.java:401) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.core.type.classreading.SimpleMetadataReader.&lt;init&gt;(SimpleMetadataReader.java:50) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:123) ~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:428) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]<\/span>\r\n<span role=\"presentation\">    ... 25 common frames omitted<\/span>\r\n<span role=\"presentation\">\u200b<\/span>\r\n<span role=\"presentation\">\u200b<\/span>\r\n<span role=\"presentation\">Process finished with exit code 0<\/span>\r\n<span role=\"presentation\">\u200b<\/span><\/pre>\n<h2 class=\"md-end-block md-heading\"><span class=\"md-plain\">\u53c2\u8003\u8d44\u6599<\/span><\/h2>\n<ul class=\"ul-list\" data-mark=\"-\">\n<li class=\"md-list-item\">\n<p class=\"md-end-block md-p\"><span class=\"md-meta-i-c md-link md-expand\"><a spellcheck=\"false\" href=\"https:\/\/zhuanlan.zhihu.com\/p\/74471219\"><span class=\"md-plain\">Spring \u6ce8\u89e3\u7f16\u7a0b\u4e4b\u6ce8\u89e3\u5c5e\u6027\u522b\u540d\u4e0e\u8986\u76d6<\/span><\/a><\/span><\/p>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u4e8b\u60c5\u662f\u8fd9\u6837\u5b50\u7684\uff1a \u6211\u60f3\u81ea\u5b9a\u4e49\u4e00\u4e2a\u7f13\u5b58\u6ce8\u89e3\uff0c\u7528\u6765\u7f13\u5b58\u65b9\u6cd5\u8fd4\u56de\u503c\uff0c\u5e76\u4e14\u652f\u6301\u81ea\u5b9a\u4e49\u7f13\u5b58\u8d85\u65f6\u65f6\u95f4\uff0c\u6ce8\u89e3\u5b9a\u4e49\u662f\u8fd9\u6837\uff1a \u200b <a href='http:\/\/prayerlaputa.com\/?p=910' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[6,74],"tags":[110,33,37],"_links":{"self":[{"href":"http:\/\/prayerlaputa.com\/index.php?rest_route=\/wp\/v2\/posts\/910"}],"collection":[{"href":"http:\/\/prayerlaputa.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/prayerlaputa.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/prayerlaputa.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/prayerlaputa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=910"}],"version-history":[{"count":2,"href":"http:\/\/prayerlaputa.com\/index.php?rest_route=\/wp\/v2\/posts\/910\/revisions"}],"predecessor-version":[{"id":912,"href":"http:\/\/prayerlaputa.com\/index.php?rest_route=\/wp\/v2\/posts\/910\/revisions\/912"}],"wp:attachment":[{"href":"http:\/\/prayerlaputa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=910"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/prayerlaputa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=910"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/prayerlaputa.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}