Spring配置扩展之JavaConfig的使用小结

2025-12-04 19:50

本文主要是介绍Spring配置扩展之JavaConfig的使用小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组...

JavaConfig 的概念

什么是JavaConfig?

JavaConfig 是 Spring 框架中基于纯 Java 代码的配置方式,用于替代传统的 XML 配置。通过注解(如 @Configuration@Bean)定义 Spring 容器的组件和依赖关系,使配置更加类型安全且易于维护。

为什么使用 JavaConfig?

类型安全:Java 代码在编译时即可检查类型错误,而 XML 配置需运行时才能发现潜在问题。
可读性强:逻辑清晰的 Java 代码比 XML 更直观,便于理解组件之间的关系。
便于重构:IDE 对 Java 代码的支持更完善(如自动补LmUnofI全、引用跳转),而 XML 缺乏此类工具支持。
模块化配置:通过 @Import 注解可拆分多个配置类,灵活组合不同模块。
与注解驱动开发协同:结合 @ComponentScan 等注解,能无缝整合自动扫描和显式配置。

JavaConfig 的核心注解

  • @Configuration:标记类为配置类,替代 XML 配置文件。
  • @Bean:在方法上声明返回的对象由 Spring 容器管理,替代 <bean> 标签。
  • @ComponentScan:自动扫描指定包下的组件(如 @Service@Repository)。

示例代码:

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource("jdbc:mysql://localhost:3306/db");
    }
}

JavaConfig配置常用注解

@Configuration

标注一个类为配置类,替代传统的XML配置文件。Spring容器会将该类中定义的Bean纳入管理。

@Bean

在配置类的方法上使用,将方法返回值注册为Spring容器中的Bean。默认以方法名作为Bean名称,可通过name属性指定别名。

@Configuration
public class AppConfig {
    @Bean(name = "dataSource")
    public DataSource createDataSource() {
        return new DruidDataSource();
    }
}

@Qualifier

当存在多个同类型Bean时,通过指定Bean名称解决依赖注入的歧义性问题。需配合@Autowired或@Resource使用。

@Autowired
@Qualifier("mysqlDataSource")
private DataSource dataSource;

@Primary

标注在Bean定义上,表示当存在多个同类型Bean时优先注入被标记的Bean。与@Qualifier的区别在于这是提供方标记而非消费方指定。

@Bean
@Primary
public DataSource primaryDawww.chinasem.cntaSource() {
    return new HikariDataSource();
}

@PropertySource

加载指定的properties或YAML配置文件到Spring环境。支持classpath前缀和文件系统路径,多个文件可用数组形式配置。

@Configuration
@PropertySource({"classpath:db.properties", "file:/etc/app/config.yml"})
public class PropertyConfig {}

@Value

注入配置文件中的属性值,支持SpEL表达式。可设置默认值避免属性不存在时报错。

@Value("${jdbc.url:jdbc:mysql://localhost/default}")
private String dbUrl;

@Value("#{systemProperties['user.timezone']}")
private String timezone;

@ComponentScan

自动扫描指定包路径下的组件(@Component/@Service/@Repository等)。可通过excludeFilters排除特定http://www.chinasem.cn组件。

@Configuration
@ComponentScan(
    basePackages = "com.example",
    excludeFilters = @Filter(type = FilterType.REGEX, pattern = ".*Test.*")
)
public class ScanConfig {}

在Spring框架中,JavaConfig可以通过注解方式加载其他配置,包括XML或JavaConfig。以下是两种核心方法的具体使用方式:

JavaConfig加载其他配置

@ImportResource注解加载XML配置

该注解用于在JavaConfig中引入XML格式的配置文件,适用于需要兼容旧版XML配置或混合配置的场景。

@Configuration
@ImportResource("classpath:application-context.xml")
public class AppConfig {
    // 主配置类内容
}
  • 路径格式:支持classpath:file:等Spring资源前缀。
  • 多文件加载:可通过数组形式指定多个文件:
    @ImportResource({"classpath:config1.xml", "classpath:config2.xml"})
    

@Import注解加载其编程他JavaConfig

该注解用于引入其他Java配置类,实现配置模块化。

@Configuration
@Imjavascriptport({DatabaseConfig.class, SecurityConfig.class})
public class AppConfig {
    // 主配置类内容
}
  • 链式导入:被导入的配置类可以继续使用@Import嵌套其他配置。
  • 自动装配:导入的配置类中定义的Bean会被自动注册到容器。

混合使用场景

两种注解可以同时使用,实现XML与JavaConfig的混合配置:

@Configuration
@Import(DatabaseConfig.class)
@ImportResource("classpath:services.xml")
public class AppConfig {
    // 综合配置类
}

注意事项

  • 路径解析:XML文件需放在资源目录下,确保编译后存在于classpath中。
  • 循环依赖:避免配置类之间相互导入形成循环引用。
  • Bean覆盖:后加载的配置中同名Bean会覆盖先前定义的Bean。

到此这篇关于Spring配置扩展之JavaConfig的使用小结的文章就介绍到这了,更多相关Spring JavaConfig内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Spring配置扩展之JavaConfig的使用小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156358

相关文章

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M