通過擴展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;