Repository navigation
JavaConfig
bdq edited this page Feb 22, 2020
·
32 revisions
@Configuration可以将类标记为配置类,并存放到容器中。配置类中支持配置文件的属性注入和编写工厂方法。在上下文启动时,容器会自动扫描resource目录下的配置文件,并将其注入到配置类@Value标注的属性中。
配置文件默认命名为application。
@Configuration注解可以将类标记为配置类
属性:
- prefix:配置项的前缀。(可选)
- location:为配置类指定加载自定义目录下配置文件(可选)
例如,resource目录下的application.yaml文件如下:
server:
localhost: 127.0.0.1
names:
- name1
- name2在配置类中应如下配置:
@Configuration(prefix = "server")
public class ConfigBean{}下面是一个例子,resource目录下的jdbcConfig.properties文件如下:
localhost = 127.0.0.1
driver = com.mysql.cj.jdbc.Driver
port = 3306需要设置location属性来读取配置文件:
@Configuration(location = "jdbcConfig.properties")
public class ConfigBean{}实现配置类的属性注入需要使用@Value注解
属性:
- value:用于指定配置文件中属性的key值
下面是一个例子:
@Configuration(prefix = "server")
public class ConfigBean{
@Value("localhost")
private String localhost;
@Value("names")
private List<String> names;
}在配置文件中,如果指定了profile属性,则会加载以profile值结尾的配置文件。 如以下配置文件:
application.yaml
profile: dev
name: helloapplication-dev.yaml
name: hello-dev由于指定了profile为dev,因此在加载配置文件时,将读取application-dev.yaml作为配置文件,而抛弃原本application.yaml中的配置。最终读取到的name属性值是hello-dev,而不是hello。利用profile可以指定不同环境下的配置文件。
在配置类中使用@Named注解标注工厂方法,容器会将工厂方法的产品存储到容器中并注入依赖。产品实例可以直接通过beanName和类型获取。同时,工厂方法也可以使用@Singleton注解设置Scope属性。 需要注意的是,只有在配置类中才可以配置工厂方法。
示例如下,首先创建一个Bean,作为工厂方法的返回类型。
@Named
publiv class Bean{}接下来使用@Named注解标注工厂方法
@Configuration(prefix = "server")
public class ConfigBean{
@Value("localhost")
private String localhost;
@Value("names")
private List<String> names;
@Singleton
@Named("factoryBean")
public Bean createBean(Bean bean){
return bean;
}
}