@configuration 类是被 spring 识别为配置文件的 java 类,等价于 xml 配置;@bean 注解在非静态方法上,用于注册 bean 实例,支持依赖注入和作用域配置。

在 Spring 中,@Configuration 和 @Bean 是定义 Java 配置类的核心注解,用来替代传统的 XML 配置,实现 Bean 的声明式注册。
什么是 @Configuration 类
@Configuration 标记的类会被 Spring 容器识别为配置类,等价于一个 XML 配置文件。它本身是一个被 @Component 注解修饰的特殊 Bean,因此也能被组件扫描发现(前提是开启了 @ComponentScan)。
关键点:
- 必须是类,不能是接口或抽象类
- 推荐使用
public修饰,避免代理问题 - 内部
@Bean方法默认以方法名作为 Bean 名,也可通过name属性指定
@Bean 方法怎么写
@Bean 注解用在方法上,表示该方法返回的对象将被注册为 Spring 容器中的一个 Bean。Spring 会调用这个方法,并管理其返回实例的生命周期。
常见写法示例:
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:h2:mem:testdb");
dataSource.setUsername("sa");
dataSource.setPassword("");
return dataSource;
}
@Bean(name = "myTemplate")
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
注意:
- 方法参数可以自动注入其他 Bean(如上面的
DataSource),Spring 会按类型匹配并注入 - 方法必须是非静态的(否则无法被 CGLIB 代理,影响作用域和 AOP)
- 默认作用域是
singleton;若需每次获取新实例,可加@Scope("prototype")
与 @Component 的区别
@Configuration 类强调“配置逻辑”,适合集中管理多个相关 Bean;而 @Component 更侧重“组件本身”。两者都能被扫描到,但语义不同:
-
@Configuration类中调用本类其他@Bean方法时,Spring 保证返回的是同一个单例对象(通过 CGLIB 代理拦截实现) -
@Component类里写普通方法,即使加了@Bean,也不会被 Spring 管理(因为没被识别为配置类) - 不建议混用:不要在
@Component类里写@Bean方法
启用配置类的方式
有三种主流方式让 Spring 加载你的 @Configuration 类:
- 直接在启动类上用
@Import(MyConfig.class) - 放在
@ComponentScan扫描路径下,靠类路径自动发现 - 在
@SpringBootApplication启动类同包或子包下,它默认包含@ComponentScan
如果配置类不在默认扫描范围内,最稳妥的做法是显式 @Import。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











