一、@Value注解
- 该注解的作用是将我们配置文件的属性读出来,有**@Value(“${}”)和@Value(“#{}”)**两种方式
- @value不仅能取properties的值,在springboot中还能取yml的值
示例:
(1)在这里使用${}方式取配置文件中的值
public class TestController{
@Value("${com.test.param1}")
private String param1;
@Value("${server.port}")
private String port;
}
(2)使用 #{}方式取SpEL表达式对应的内容
public class TestController{
// 这里我们取的值是注册在Spring容器中bean id 为userEntity的name的值
@Value("#{userEntity.name}")
private String name;
@Value("#{userEntity.sex}")
private String sex;
}
二、@PropertySource注解
- 这个注解用来导入整个配置文件中的值,仅支持properties类型的配置文件
示例:
(1)导入指定路径下的配置文件
@Configuration
@PropertySource("classpath:/com/myconfig/app.properties")
public class AppConfig {
@Autowired
Environment env;
@Bean
public TestBean testBean() {
TestBean testBean = new TestBean();
testBean.setName(env.getProperty("testbean.name"));
return testBean;
}
}
(2)与@ConfigurationProperties类配合使用,封装成一个实体类。@ConfigurationProperties,它可以把同类的配置信息自动封装成实体类
数据库的配置文件:jdbc.properties
## 配置db数据库相关信息
datasource.drivername=com.mysql.jdbc.Driver
datasource.username=vipkid_xb
datasource.password=jmdneyh4m2UT
datasource.url=jdbc:mysql://localhost:3316/test?zeroDateTimeBehavior=convertToNull
#### 连接池相关
datasource.maximum-pool-size=10
datasource.auto-commit=true
datasource.connection-test-query=SELECT 1
datasource.connectionTimeout=20000
datasource.maxLifetime=180000
配置类:
@Configuration
@PropertySource(value = "classpath:jdbc.properties", name = "jdbc-config", ignoreResourceNotFound = false, encoding = "UTF-8")
@ConfigurationProperties(prefix = "datasource")
public class JdbcConfig implements TransactionManagementConfigurer {
private String username;
private String password;
private String url;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setUrl(String url) {
this.url = url;
}
// 此处只是为了演示 所以不用连接池了
@Bean
public DataSource dataSource() {
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser(username);
dataSource.setPassword(password);
dataSource.setURL(url);
return dataSource;
}
}
另外:还可以直接把@ConfigurationProperties
注解放在@Bean上
@Configuration
@PropertySource(value = "classpath:jdbc.properties", name = "jdbc-config", ignoreResourceNotFound = false, encoding = "UTF-8")
public class JdbcConfig implements TransactionManagementConfigurer {
@ConfigurationProperties(prefix = "datasource")
@Bean
public DataSource dataSource() {
//dataSource.setUser(username);
//dataSource.setPassword(password);
//dataSource.setURL(url);
return new MysqlDataSource();
}
}
三、使用@Import注解
- @Import注解用来导入配置类(@Configuration注解的配置类、声明@Bean注解的bean方法等)
- 它的作用就是可以将普通类导入到IOC容器中
示例:
创建一个Student实体类
public class Student{
// 包含 id,name,sex,age等属性
}
创建配置类,这里使用@Import注解导入了Student类
@Configuration
@Import(Student.class)
public class ImportConfig {
// 这里可以定义一个Bean方法返回一个Student对象
@Bean
public Student getStudent(){
return new Student();
}
}
测试代码
public static void main(String[] args){
ApplicationContext ctx =
new AnnotationConfigApplicationContext(ImportConfig.class);
String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
for (String name : beanDefinitionNames) {
System.out.println(name);
}
}
如果控制台打印了相关name,则证明导入成功
四、@ImportResource注解
-
这个注解很简单,就是导入spring的xml配置文件
-
通过locations属性加载对应的xml配置文件,同时需要配合@Configuration注解一起使用,定义为配置类
-
用法请参考:https://www.jianshu.com/p/ec628153b7a2