diff --git a/matrix-aop/src/main/java/com/nepxion/matrix/registrar/RegistrarFactoryBean.java b/matrix-aop/src/main/java/com/nepxion/matrix/registrar/RegistrarFactoryBean.java index 0224fb6..f4fafc8 100644 --- a/matrix-aop/src/main/java/com/nepxion/matrix/registrar/RegistrarFactoryBean.java +++ b/matrix-aop/src/main/java/com/nepxion/matrix/registrar/RegistrarFactoryBean.java @@ -5,6 +5,7 @@ *

Description: Nepxion Matrix AOP

*

Copyright: Copyright (c) 2017-2050

*

Company: Nepxion

+ * * @author Haojun Ren * @version 1.0 */ @@ -17,66 +18,105 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.EnvironmentAware; +import org.springframework.core.env.Environment; +import org.springframework.util.StringUtils; + +import java.net.MalformedURLException; +import java.net.URL; + +public class RegistrarFactoryBean implements ApplicationContextAware, FactoryBean, InitializingBean, BeanClassLoaderAware, EnvironmentAware { + protected ApplicationContext applicationContext; + protected Class interfaze; + protected MethodInterceptor interceptor; + protected Object proxy; + protected ClassLoader classLoader; + protected Environment environment; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + public ApplicationContext getApplicationContext() { + return applicationContext; + } + + @Override + public Object getObject() throws Exception { + return proxy; + } + + @Override + public Class getObjectType() { + return interfaze; + } + + @Override + public boolean isSingleton() { + return false; + } + + @Override + public void afterPropertiesSet() throws Exception { + ProxyFactory proxyFactory = new ProxyFactory(); + proxyFactory.addInterface(interfaze); + proxyFactory.addAdvice(interceptor); + proxyFactory.setOptimize(false); + + proxy = proxyFactory.getProxy(classLoader); + resolveVariable(this.environment); + } + + protected void resolveVariable(Environment environment) { + } + + protected String resolve(String value) { + if (StringUtils.hasText(value)) { + return this.environment.resolvePlaceholders(value); + } + return value; + } + + protected String resolveUrl(String url) { + url = resolve(url); + if (StringUtils.hasText(url) && !(url.startsWith("#{") && url.contains("}"))) { + if (!url.contains("://")) { + url = "http://" + url; + } + try { + new URL(url); + } catch (MalformedURLException e) { + throw new IllegalArgumentException(url + " is malformed", e); + } + } + return url; + } + + @Override + public void setBeanClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + } + + @Override + public void setEnvironment(Environment environment) { + this.environment = environment; + } + + public Class getInterfaze() { + return interfaze; + } + + public void setInterfaze(Class interfaze) { + this.interfaze = interfaze; + } + + public MethodInterceptor getInterceptor() { + return interceptor; + } + + public void setInterceptor(MethodInterceptor interceptor) { + this.interceptor = interceptor; + } -public class RegistrarFactoryBean implements ApplicationContextAware, FactoryBean, InitializingBean, BeanClassLoaderAware { - private ApplicationContext applicationContext; - private Class interfaze; - private MethodInterceptor interceptor; - private Object proxy; - private ClassLoader classLoader; - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } - - public ApplicationContext getApplicationContext() { - return applicationContext; - } - - @Override - public Object getObject() throws Exception { - return proxy; - } - - @Override - public Class getObjectType() { - return interfaze; - } - - @Override - public boolean isSingleton() { - return false; - } - - @Override - public void afterPropertiesSet() throws Exception { - ProxyFactory proxyFactory = new ProxyFactory(); - proxyFactory.addInterface(interfaze); - proxyFactory.addAdvice(interceptor); - proxyFactory.setOptimize(false); - - proxy = proxyFactory.getProxy(classLoader); - } - - @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; - } - - public Class getInterfaze() { - return interfaze; - } - - public void setInterfaze(Class interfaze) { - this.interfaze = interfaze; - } - - public MethodInterceptor getInterceptor() { - return interceptor; - } - - public void setInterceptor(MethodInterceptor interceptor) { - this.interceptor = interceptor; - } } \ No newline at end of file diff --git a/matrix-spring-boot-registrar-example/src/main/java/com/nepxion/matrix/registrar/example/aop/MyRegistrarFactoryBean.java b/matrix-spring-boot-registrar-example/src/main/java/com/nepxion/matrix/registrar/example/aop/MyRegistrarFactoryBean.java index 257d9f5..367935a 100644 --- a/matrix-spring-boot-registrar-example/src/main/java/com/nepxion/matrix/registrar/example/aop/MyRegistrarFactoryBean.java +++ b/matrix-spring-boot-registrar-example/src/main/java/com/nepxion/matrix/registrar/example/aop/MyRegistrarFactoryBean.java @@ -15,6 +15,7 @@ import org.apache.commons.lang3.builder.ToStringStyle; import com.nepxion.matrix.registrar.RegistrarFactoryBean; +import org.springframework.core.env.Environment; public class MyRegistrarFactoryBean extends RegistrarFactoryBean { private String name; @@ -45,7 +46,13 @@ public void setDescription(String description) { this.description = description; } - @Override + @Override + protected void resolveVariable(Environment environment) { + resolve(label); + resolveUrl(description); + } + + @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } diff --git a/matrix-spring-boot-registrar-example/src/main/java/com/nepxion/matrix/registrar/example/service/MyService1.java b/matrix-spring-boot-registrar-example/src/main/java/com/nepxion/matrix/registrar/example/service/MyService1.java index f2d2afd..a4c29db 100644 --- a/matrix-spring-boot-registrar-example/src/main/java/com/nepxion/matrix/registrar/example/service/MyService1.java +++ b/matrix-spring-boot-registrar-example/src/main/java/com/nepxion/matrix/registrar/example/service/MyService1.java @@ -11,7 +11,7 @@ import com.nepxion.matrix.registrar.example.aop.MyAnnotation; -@MyAnnotation(name = "a", label = "b", description = "c") +@MyAnnotation(name = "a", label = "b", description = "${myAnno.c:hello}") public interface MyService1 { String doA(String id); diff --git a/matrix-spring-boot-registrar-example/src/main/resources/application.yml b/matrix-spring-boot-registrar-example/src/main/resources/application.yml new file mode 100644 index 0000000..bd3c9d7 --- /dev/null +++ b/matrix-spring-boot-registrar-example/src/main/resources/application.yml @@ -0,0 +1,6 @@ +server: + port: 9999 + + +myAnno: + c: localhost:8080 \ No newline at end of file