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

总结

回到顶部

相关推荐
彭亚川Allen6 小时前
985 在职研究生到底怎么样?是不是水硕?是不是.....?
前端·后端·程序员
乘风2486 小时前
# 我做了个会遗忘的 AI 记忆,召回率反而从 8% 涨到 100%
后端
Rain的Java大神之路7 小时前
面试被LeetCode 27(移除元素)问懵?别再用两层 for 循环了:一道“简单题”吃透双指针原地删除,附面试加分话术 + 11 个避坑清单
后端·leetcode·面试
悟天特斯7 小时前
安防一体化:从“各管各的“到“全局联动“
java·大数据·网络·人工智能·物联网
70后写java的老码农7 小时前
Spring Boot 3.x + ShardingSphere 5.x + MyBatis-Plus 3.x:订单分库分表实战(含两个踩坑记录)
java
霸道流氓气质7 小时前
AI 翻译插件:翻译记忆级联复用、术语混合检索与结构化质量门禁的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
斯维赤7 小时前
OCR到底是接入第三方API 还是自己封装?
java·ocr
利威尔xu7 小时前
Go IM 源码实战(11):token 只是个 HASH,多端互踢的顺序错了就踢错人
后端·微服务·面试·架构·golang
码智社7 小时前
Redis 哨兵模式详解:从原理到生产实践
java·redis
救救孩子把7 小时前
结构化输出为何“格式正确、答案错误”?JSON Schema 的能力边界
android·java·json·agent·agent服务