重生之 SpringBoot3 入门保姆级学习(06、属性绑定)
- 2.3.1 使用 @ConfigurationProperties
- 2.3.2 使用 @EnableConfigurationProperties
2.3.1 使用 @ConfigurationProperties
- application.properties 文件书写相关配置
pig.id=1
pig.name=王萍
pig.age=21
- 方法一:新建 Pig 类属性绑定到 application.properties 的 pig
package com.zhong.boot302demo.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @ClassName : pig
* @Description : 读取配置文件
* @Author : zhx
* @Date: 2024-05-26 14:39
*/
@ConfigurationProperties(prefix = "pig") // 读取配置信息前缀为 pig 的
@Component // 注入到容器
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Pig {
private Long id;
private String name;
private Integer age;
}
- 打印查看结果
package com.zhong.boot302demo;
import com.zhong.boot302demo.bean.Pig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Boot302DemoApplication {
public static void main(String[] args) {
var ioc = SpringApplication.run(Boot302DemoApplication.class, args);
System.out.println(ioc.getBean(Pig.class));
}
}
- 读取配置成功 但是出现乱码
-
解决方法:
汉化:找到 编辑器 -> 文件编码 进行修改
非汉化:搜索 File Encodings 进行修改
- 修改完后 重新在 application.properties 写入配置
- 方法二:将 @ConfigurationProperties(prefix = “pig”) 放到方法上 并为方法添加 @Bean 注解使其注入容器
2.3.2 使用 @EnableConfigurationProperties
- application.properties 文件书写相关配置
sheep.id=2
sheep.name=钟宏雄
sheep.age=23
- 新建 Sheep 类并指定读取 application.properties 文件中 sheep 属性
package com.zhong.boot302demo.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @ClassName : Sheep
* @Description :
* @Author : zhx
* @Date: 2024-05-26 14:59
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ConfigurationProperties(prefix = "sheep")
public class Sheep {
private Long id;
private String name;
private Integer age;
}
- 新增 config 注解 @EnableConfigurationProperties(Sheep.class)
package com.zhong.boot302demo.config;
import com.zhong.boot302demo.bean.Pig;
import com.zhong.boot302demo.bean.Sheep;
import com.zhong.boot302demo.bean.User;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
/**
* @ClassName : AppConfig
* @Description : 配置类
* @Author : zhx
* @Date: 2024-05-23 12:55
*/
/**
* EnableConfigurationProperties(Sheep.class)
* 1、开启 Sheep 组件的属性绑定
* 2、默认会把这个组件自己放到容器中
* 3、一般用于导入第三方写好的组件进行数据绑定
* 注意: SpringBoot 默认只扫描自己主程序所在的包。如果导入第三方包,
* 即使组件上标注了 @Component、@ConfigurationProperties 注解
* 也没用,因为组件都扫描不进来。
*/
@EnableConfigurationProperties(Sheep.class)
@Configuration
public class AppConfig {
/**
* 1、组件默认单实例的
* 2、通过 @Scope("prototype") 修改为多实例
* @return user
*/
@Scope("prototype")
@Bean // 替代以前的 ioc.xml 方式配置 Bean。组件在容器中的名字是方法名。可以直接修改默认值 @Bean("user01")
public User user() {
User user = new User();
user.setId("1");
user.setName("张三");
return user;
}
@ConfigurationProperties(prefix = "pig")
@Bean
public Pig pig() {
return new Pig();
}
}
- 新增输入语句 测试是否生效
package com.zhong.boot302demo;
import com.zhong.boot302demo.bean.Pig;
import com.zhong.boot302demo.bean.Sheep;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Boot302DemoApplication {
public static void main(String[] args) {
var ioc = SpringApplication.run(Boot302DemoApplication.class, args);
System.out.println(ioc.getBean(Pig.class));
System.out.println(ioc.getBean(Sheep.class));
}
}
- 成功绑定属性