重生之 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")@Beanpublic 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));}
}
- 成功绑定属性