【第9章】SpringBoot中Bean的扫描和注册

文章目录


前言

注册bean对象相关内容。


一、bean扫描

1. @SpringBootApplication

springboot应用程序会扫描启动类同级及子目录下的java文件。

2. @ComponentScan

bash 复制代码
@Configuration
@ComponentScan(basePackages = "org.example.spring")
public class SpringBootConfig {}

二、bean注册

1.应用bean注册

在springboot应用中我们通常通过注解的形式完成bean对象的注册

注解 描述
@Component 被标识的类被spring容器管理
@Controller 控制层注解,@Component衍生类
@Service 服务层注解,@Component衍生类
@Repository 持久层注解,@Component衍生类

2.外部bean注册

将jar包中的类交由spring容器管理

2.1 @Bean

java 复制代码
@Configuration
public class DruidConfig {
    @Bean
    @ConfigurationProperties("spring.datasource.druid")
    public DataSource dataSource(){
        return new DruidDataSource();
    }
}

2.2 @Import

bash 复制代码
@MapperScan("org.example.springboot3.mybatis.mappers")
@RestController
@SpringBootApplication
@Import(DruidConfig.class)
public class SpringBoot3Application {
    private static final Logger log = LoggerFactory.getLogger(SpringBoot3Application.class);
    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(SpringBoot3Application.class, args);
        String appName = run.getEnvironment().getProperty("spring.application.name");
        log.info("{}启动完成",appName);
    }
    @RequestMapping("/")
    String home() {
        return "Hello SpringBoot!";
    }
}

3.bean注册条件

3.1 @ConditionalOnProperty

java 复制代码
@Bean
@ConfigurationProperties("spring.datasource.druid")
@ConditionalOnProperty(prefix = "spring.datasource.druid",value = {"driver-class-name","url","username","password"})
public DataSource dataSource(){
    return new DruidDataSource();
}

3.2 @ConditionalOnMissingBean

bash 复制代码
@Bean
@ConfigurationProperties("spring.datasource.druid")
@ConditionalOnProperty(prefix = "spring.datasource.druid",value = {"driver-class-name","url","username","password"})
@ConditionalOnMissingBean(DataSource.class)
public DataSource dataSource(){
    return new DruidDataSource();
}

3.3 @ConditionalOnBean

java 复制代码
@Bean
@ConfigurationProperties("spring.datasource.druid")
@ConditionalOnProperty(prefix = "spring.datasource.druid",value = {"driver-class-name","url","username","password"})
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnBean(com.mysql.cj.jdbc.Driver.class)
public DataSource dataSource(){
    return new DruidDataSource();
}

总结

回到顶部

相关推荐
Momentary_SixthSense几秒前
设计模式之工厂模式
java·开发语言·设计模式
殷紫川1 分钟前
深入拆解 Java 内存模型:从原子性、可见性到有序性,彻底搞懂 happen-before 规则
java·后端
殷紫川3 分钟前
ThreadLocal 深度剖析:底层实现、内存泄漏根因与生产环境避坑指南
java
元宝骑士4 分钟前
FIND_IN_SET使用指南:场景、优缺点与MySQL优化策略
后端·mysql
用户31952370347716 分钟前
记一次 PostgreSQL WAL 日志撑爆磁盘的排查
后端
nghxni6 分钟前
LightESB PlatformHttp v3.0.0:JSONPath 订单转换 HTTP 路由实战
后端
砍材农夫12 分钟前
spring-ai 第六模型介绍-聊天模型
java·人工智能·spring
勿忘,瞬间15 分钟前
数据结构—顺序表
java·开发语言
武子康39 分钟前
大数据-263 实时数仓-Canal 增量订阅与消费原理:MySQL Binlog 数据同步实践
大数据·hadoop·后端
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【5】ReactAgent 构建器深度源码解析
java·人工智能·spring