通过扩展spring,在service层写注解,直接读取属性值。
在spring容器开启时,直接扫描注解并设置到service的属性上。
注意:controller得不到值,必须在service层。
因为它扩展的是spring提供的方法,service层spring管理,
才可以实现,而controller是springmvc无法实现。
package com.jt.common.spring.exetend;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import java.util.Properties;
public class ExtendedPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
private Properties props;
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
throws BeansException {
super.processProperties(beanFactory, props);
this.props = props;
}
public String getProperty(String key) {
return props.getProperty(key);
}
}
package com.jt.common.spring.exetend;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface PropertyConfig {
String value() default "";
boolean required() default true;
}
在service中注入即可,前提:属性名需要在属性文件中定义。
spring在加载时会自动注入,前提需要在spring配置文件中加载配置文件。
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<value>classpath:env.properties</value>
<value>classpath:httpclient.properties</value>
</list>
</property>
MANAGE_URL=http://manage.jt.com
@PropertyConfig
private String MANAGE_URL;