Java Spring 框架技术从入门到放弃:Spring生态之Spring基于配置文件管理类学习笔记:从 XML 到 JavaConfig

Java Spring 框架技术从入门到放弃:Spring生态之Spring基于配置文件管理类学习笔记:从 XML 到 JavaConfig

一、配置文件管理的本质与价值

概念:通过 XML 或 Java 配置类管理 Spring 容器中的 Bean,实现对象创建、依赖注入和生命周期控制的解耦。
生活案例:大型商场的管理系统,通过配置文件(如商场平面图)定义每个店铺(Bean)的位置、营业时间和所需资源(依赖),而非硬编码在代码中。

核心价值

  • 分离配置与代码:业务逻辑与 Bean 管理解耦,修改配置无需重启应用。
  • 灵活扩展:支持不同环境(开发 / 测试 / 生产)的差异化配置。
  • 可读性增强:集中管理 Bean 关系,便于团队协作和维护。

二、XML 配置文件核心要素

1. Bean 定义(Bean Definition)

生活案例:餐厅菜单定义(Bean),包括菜品名称(id)、制作方法(class)、分量(scope)等。
XML 示例

<bean id="coffeeMachine" class="com.example.AmericanCoffeeMachine" scope="singleton">
    <property name="brand" value="Nespresso"/>
</bean>

关键属性

  • id:Bean 的唯一标识符(类似餐厅的桌号)。
  • class:Bean 的实现类(如咖啡机的具体型号)。
  • scope:Bean 的作用域(如 singleton 单例、prototype 多例)。

2. 依赖注入(DI)

生活案例:奶茶店员工(Bean)需要奶茶杯(依赖),通过配置文件指定杯子类型(如纸杯、塑料杯)。
构造器注入

<bean id="barista" class="com.example.Barista">
    <constructor-arg ref="coffeeMachine"/>
</bean>

Setter 注入

<bean id="waiter" class="com.example.Waiter">
    <property name="tray" ref="dinnerTray"/>
</bean>

3. 高级配置

集合注入

<bean id="restaurant" class="com.example.Restaurant">
    <property name="tables">
        <list>
            <ref bean="table1"/>
            <ref bean="table2"/>
        </list>
    </property>
</bean>

外部属性文件

<context:property-placeholder location="jdbc.properties"/>
<bean id="dataSource" class="com.mysql.jdbc.DriverManagerDataSource">
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.user}"/>
</bean>

三、Java 配置类(JavaConfig)实践

1. @Configuration + @Bean

生活案例:家庭影院系统配置,通过 Java 代码定义音响、投影仪等设备(Bean)。
示例代码

@Configuration
public class HomeTheaterConfig {
    @Bean
    public Speaker speaker() {
        return new DolbySpeaker();
    }

    @Bean
    public Projector projector() {
        return new 4KProjector();
    }
}

2. 条件化 Bean(@Conditional)

生活案例:根据天气自动切换空调模式(制冷 / 制热)。
示例代码

@Configuration
public class AirConditionerConfig {
    @Bean
    @Conditional(SummerCondition.class)
    public AC ac() {
        return new CoolingAC();
    }

    @Bean
    @Conditional(WinterCondition.class)
    public AC ac() {
        return new HeatingAC();
    }
}

四、生命周期管理

1. 初始化与销毁方法

生活案例:工厂设备的开机自检(初始化)和关机维护(销毁)。
XML 配置

<bean id="machine" class="com.example.ManufacturingMachine" 
      init-method="startupCheck" destroy-method="shutdownCleanup"/>

Java 配置

@Bean(destroyMethod = "close")
public DatabaseConnection database() {
    return new DatabaseConnection();
}

2. 生命周期接口

生活案例:图书馆书籍的借阅流程(初始化)和归还流程(销毁)。
实现 InitializingBean 和 DisposableBean

public class Book implements InitializingBean, DisposableBean {
    public void afterPropertiesSet() {
        System.out.println("书籍上架");
    }

    public void destroy() {
        System.out.println("书籍下架");
    }
}

五、最佳实践与避坑指南

  1. 命名规范:Bean 的 id 采用驼峰命名(如 userService),避免与类名混淆。
  2. 依赖管理:优先使用构造器注入,确保依赖不可变。
  3. 环境隔离:通过 @Profile 或 spring.profiles.active 区分不同环境配置。
  4. 避免循环依赖:使用 @Lazy 或调整 Bean 加载顺序解决。

六、预习:配置文件的进阶知识

  1. 注解与 XML 混合配置:结合 @Autowired 和 XML 实现复杂依赖管理。
  2. Spring Boot 自动配置:通过 @SpringBootApplication 自动加载默认配置。
  3. 云原生配置:使用 @ConfigurationProperties 绑定外部配置(如 Docker 环境变量)。
  4. AOP 与配置结合:在 XML 中定义切面,实现日志、事务等横切逻辑。

通过配置文件管理类,Spring 实现了对象管理的灵活性和可维护性。掌握 XML 和 JavaConfig 的核心用法,能更好地应对不同规模的项目需求,为后续学习 Spring Boot 和微服务架构奠定基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值