一、ResourceBundle
优点:可以在非Web应用中读取资源文件
缺点:只能加载类classes下面的资源文件且只能读取.properties文件
1. 配置文件放在classpath(resource源包下)不用加后缀properties
ResourceBundle bundle = ResourceBundle.getBundle("config");
二、getResourceAsStream
优点:可以在非Web应用中读取配置资源信息,可以读取任意的资源文件信息
缺点:只能加载类classes下面的资源文件
1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取,最终还是由ClassLoader获取资源。
2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。
3. ServletContext. getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓,当然这和具体的容器实现有关。
三、PropertiesLoaderUtils
缺点:由spring提供,只能加载类classes下面的资源文件
Properties properties = PropertiesLoaderUtils.loadAllProperties("config.properties");
四、@Value
1. @Value("${...}")主要用于加载外部属性文件中的值
@Value("${mat.server.port}") private Integer port;
2. @Value("#{...}")用于执行SpEl表达式,并将内容赋值给属性
// SpEL: 调用字符串的getBytes方法,然后调用length属性 @Value("#{'Hello World'.bytes.length}") private String helloWorldbytes;
3. @Value("#{${...}}")混合使用,必须#{}在外面,${}在里面
// SpEL: 传入一个字符串,根据","切分后插入列表中, #{}和${}配置使用(注意单引号) @Value("#{'${server.name}'.split(',')}") private List<String> servers;
五、Environment
@Autowired private Environment env;
六、@ConfigurationProperties
@ConfigurationProperties(locations = "classpath:param.properties", prefix = "param")