一、早期阶段:手动编写Java Bean
-
基本结构
-
私有属性:所有字段均为
private
,保证封装性。 -
公共构造方法:提供无参构造(JavaBean规范)或有参构造(POJO常见)。
-
Setter/Getter方法:手动编写属性的访问和修改方法。
public class User {private String name;private int age;// 无参构造(JavaBean规范)public User() {}// Getter/Setter方法public String getName() { return name; }public void setName(String name) { this.name = name; }// 其他方法... }
-
-
问题
-
代码冗余:大量重复的样板代码。
-
维护成本高:属性变更需同步修改方法。
-
二、Lombok阶段:自动化代码生成
-
引入Lombok
-
依赖:通过Maven/Gradle添加Lombok依赖。
-
注解驱动:使用
@Data
、@Getter
等注解自动生成代码。
import lombok.Data;@Data // 自动生成Getter/Setter/toString/equals/hashCode public class User {private String name;private int age; }
-
-
关键注解
-
@Data
:综合注解,生成Getter/Setter等。 -
@NoArgsConstructor
:生成无参构造。 -
@AllArgsConstructor
:生成全参构造。
-
-
优势与局限
-
优点:代码简洁,减少冗余。
-
局限:需IDE插件支持,可能隐藏逻辑细节。
-
三、Spring Boot配置绑定
-
外部化配置
-
目标:将
application.properties
或application.yml
中的配置绑定到Java类。
# application.properties app.name=MyApp app.version=1.0
-
-
配置类注解
-
@ConfigurationProperties
:绑定配置到类的字段。 -
@Component
或@Configuration
:将类注册为Spring Bean。
@Configuration @ConfigurationProperties(prefix = "app") public class AppConfig {private String name;private String version;// Setter方法(旧版本必需)public void setName(String name) { this.name = name; }// 其他Setter... }
-
-
新特性:构造器绑定(Spring Boot 2.2+)
-
无需Setter:通过构造器直接注入属性。
-
不可变对象:保证线程安全和数据一致性。
@ConfigurationProperties(prefix = "app") public class AppConfig {private final String name;private final String version;// 构造器绑定(需@ConstructorBinding)public AppConfig(String name, String version) {this.name = name;this.version = version;} }
-
四、对比总结
阶段 | 代码量 | 灵活性 | 维护性 | 适用场景 |
---|---|---|---|---|
手动编写Java Bean | 高 | 高 | 低 | 传统SSM项目 |
Lombok | 低 | 中 | 中 | 快速开发,减少样板代码 |
Spring Boot配置绑定 | 低 | 高 | 高 | 外部化配置、云原生应用 |
五、扩展:Java Record(Java 14+)
-
不可变对象:自动生成
equals()
、hashCode()
等方法。 -
简化语法:适用于纯数据传输对象(DTO)。
public record User(String name, int age) {}
六、常见误区纠正
-
@Configuration
vs@ConfigurationProperties
-
@Configuration
:定义配置类,包含@Bean
方法。 -
@ConfigurationProperties
:绑定外部属性到类,无需@Bean
。
-
-
Setter是否必需?
-
旧版本:需Setter方法。
-
新版本:支持构造器绑定(推荐)。
-
七、最佳实践
-
优先使用构造器绑定:保证配置类的不可变性。
-
结合Lombok和Spring Boot:在非配置类中使用
@Data
简化代码。 -
版本适配:根据Spring Boot版本选择绑定方式。