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

总结

回到顶部

相关推荐
用户8356290780512 小时前
无需 Office:Python 批量转换 PPT 为图片
后端·python
啊哈灵机一动2 小时前
使用golang搭建一个nes 模拟器
后端
日月云棠3 小时前
各版本JDK对比:JDK 25 特性详解
java
间彧3 小时前
SpringBoot + ShardingSphere 读写分离实战指南
后端
砍材农夫3 小时前
订单超时
后端
树獭叔叔3 小时前
06-大模型如何"学习":从梯度下降到AdamW优化器
后端·aigc·openai
用户8307196840824 小时前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
得鹿4 小时前
MySQL基础架构与存储引擎、索引、事务、锁、日志
后端
程序员飞哥4 小时前
Block科技公司裁员四千人,竟然是因为 AI ?
人工智能·后端·程序员
JavaGuide4 小时前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code