SpringBoot中@Configuration注解标记的类到底是什么?

参考文章:https://blog.csdn.net/zhr2376494700/article/details/139664396

每一次在使用配置类时,都是按照流程,给类添加注解、写一个方法添加@Bean注解将返回对象作为bean进行注册,但是为什么要用这种形式,Spring boot提供这种形式的配置类为了解决什么问题呢?

首先明确配置类的目的,配置类就是用于注册一个Bean的,只不过有些Bean在初始化的过程中需要获取一些配置信息,装配好后才能完成初始化进入ioc容器。 配置类就是为提供了添加初始化逻辑的位置。因此我们可以理解为:@Configuration声明的配置类就起到了一个代替配置文件(yml、xml)的作用。

使用规则

Spring Boot 推荐我们使用@Configuration全注解的方式加载 Spring 配置,其实现方式如下:

  1. 使用 @Configuration 注解定义配置类,替换 Spring 的配置文件;
  2. 配置类内部可以包含有一个或多个被 @Bean 注解的方法,这些方法会被AnnotationConfigApplicationContext 或
    AnnotationConfigWebApplicationContext 类扫描,构建 bean 定义(相当于 Spring配置文件中的标签)方法的返回值会以组件的形式添加到容器中,组件的 id 就是方法名。

由此我们看出配置类就是用于注册Bean的,只不过这个Bean注册是需要添加很多逻辑,比如从properties文件中获取一些值等,因此用配置类这种形式直接注册组装好的Bean。例如:RedisTemplate,在配置类中直接提前组装好序列化器在注册成Bean。这样用户使用时就不用手动指定了。

@Conditional注解

通过上述我们知道程序启动时,会将配置类中的Bean进行注册,但是一个项目以及它依赖的各种jar包 中有n多个配置类,每次启动时都把他们一次性加载到 IOC 吗?

肯定不会的,不然会存在太多注册但是没用的Bean,很浪费资源。因此很多配置类都会结合@Condition注解根据条件判断来决定程序启动时是否要加载当前配置类。(一般常见的条件有:某某类存不存在等 。

常见Condition注解:
@ConditionalOnBean:当有指定Bean的条件下

@ConditionalOnClass:当有指定的类的条件下

@ConditionalOnCloudPlatform:当使用云平台是

@ConditionalOnExpression:当表达式为true时才去实例化

@ConditionalOnJava:基于JVM版本作为判断条件

@ConditionalOnJndi:在JNDI存在的条件下查找指定的位置

@ConditionalOnMissingBean:当没有指定Bean的情况下

@ConditionalOnMissingClass:当没有指定类的情况下

@ConditionalOnNotWebApplication:当前项目不是Web项目的条件下

@ConditionalOnProperty:指定的属性是否有指定的值

@ConditionalOnResource:类路径是否有指定的值

@ConditionalOnOnSingleCandidate:当指定Bean在容器中只有一个,或者有多个但是指定首选的Bean

@ConditionalOnWarDeployment 当是以war打包条件下

@ConditionalOnWebApplication:当前项目是Web项目的条件下

例如:只有rocketMQ存在,rocketMQUtil才会加载(只是一个例子,不一定有这两个类))

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@Configuration注解Spring Boot的作用是将标记为配置,用于定义Spring Bean和其他配置。它是Spring框架的一部分,用于替代传统的XML配置文件。 通过使用@Configuration注解,我们可以将一个声明为配置,并在其定义@Bean注解的方法来创建和配置Spring Bean。这些@Bean方法将在应用程序启动时被Spring容器调用,并将返回的对象注册为Spring Bean。 举个例子,假设我们有一个名为DatabaseConfig的配置,用于配置数据库连接。我们可以使用@Configuration注解标记这个,并在其定义@Bean方法来创建DataSource对象: ```java @Configuration public class DatabaseConfig { @Bean public DataSource dataSource() { // 创建并配置DataSource对象 DataSource dataSource = new DataSource(); dataSource.setUrl("jdbc:mysql://localhost:3306/mydb"); dataSource.setUsername("username"); dataSource.setPassword("password"); return dataSource; } } ``` 在上述示例,使用@Configuration注解标记了DatabaseConfig,并在它的dataSource()方法上使用@Bean注解来告诉Spring容器要创建一个名为dataSource的Bean,并使用方法的返回值作为Bean的实例。 这样,在应用程序启动时,Spring容器将会调用dataSource()方法,并将返回的DataSource对象注册为Spring Bean,我们可以在其他地方使用@Autowired注解进行依赖注入。 总结一下,@Configuration注解的作用是将标记为配置,在其定义的@Bean方法用于创建和配置Spring Bean。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值