【第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();
}

总结

回到顶部

相关推荐
奋斗的小方1 分钟前
Java基础篇09:项目实战
java·开发语言
海兰2 分钟前
【第21篇-续】graph-Stream-Node改造为适配openAI模型示例
java·人工智能·spring boot·spring·spring ai
vKd0Ff21L5 分钟前
如何在Dev-C++中设置TDM-GCC为默认编译器第九十一篇
java·jvm·c++
武子康7 分钟前
Java-221 RocketMQ 消息存储核心原理:CommitLog、ConsumerQueue、IndexFile 与消息过滤机制
java·大数据·分布式·消息队列·rabbitmq·rocketmq·java-rocketmq
神奇小汤圆8 分钟前
为什么Redis能称霸缓存界?揭秘其每秒10万+读写的核心技术
后端
楼田莉子13 分钟前
C++17新特性:结构化绑定/inline变量/if相关的变化
c++·后端·学习
北风toto14 分钟前
为什么 IntelliJ IDEA Community 无法开发 Vue?——附解决方案
java·vue.js·intellij-idea
programhelp_14 分钟前
Google 2026 New Grad SDE VO 三轮面试详解 | 含Behavioral、Coding、Design
java·服务器·数据库
驭渊的小故事19 分钟前
java中的进程的详细解析
java·开发语言
Mr_sst26 分钟前
Codex 部署、使用教程 & Vibe Coding 实战指南
java·ai·语言模型·chatgpt·ai编程