springboot中Properties註解的實現
阿新 • • 發佈:2019-01-10
關於@PropertySources註解的理解:http://www.imooc.com/article/252889?block_id=tuijian_wz
public interface PropertySources extends Iterable<PropertySource<?>> { /** * Return a sequential {@link Stream} containing the property sources. * @since 5.1 */ default Stream<PropertySource<?>> stream() { return StreamSupport.stream(spliterator(), false); } /** * Return whether a property source with the given name is contained. * @param name the {@linkplain PropertySource#getName() name of the property source} to find */ boolean contains(String name); /** * Return the property source with the given name, {@code null} if not found. * @param name the {@linkplain PropertySource#getName() name of the property source} to find */ @Nullable PropertySource<?> get(String name); 這就是PropertySources的介面,那麼它的實現類在哪裡?是MutablePropertySources, }
PropertySources是由工廠類生成的,看看DefaultPropertySourceFactory
public class DefaultPropertySourceFactory implements PropertySourceFactory { @Override public PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource) throws IOException { return (name != null? new ResourcePropertySource(name, resource) : new ResourcePropertySource(resource)); } }
然後又呼叫ResourcePropertySource類,在該類下,實現了對配置檔案的載入loadProperties(resource).
public class ResourcePropertySource extends PropertiesPropertySource { /** The original resource name, if different from the given name. */ @Nullable private final String resourceName; /** * Create a PropertySource having the given name based on Properties * loaded from the given encoded resource. */ public ResourcePropertySource(String name, EncodedResource resource) throws IOException { super(name, PropertiesLoaderUtils.loadProperties(resource)); this.resourceName = getNameForResource(resource.getResource()); }
剩下的就是java的檔案的載入過程,細節就不再討論了