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

总结

回到顶部

相关推荐
KD1 小时前
设计模式——责任链模式实战,优雅处理Kafka消息
后端·设计模式·kafka
陈文锦丫6 小时前
MQ的学习
java·开发语言
乌暮6 小时前
JavaEE初阶---线程安全问题
java·java-ee
爱笑的眼睛116 小时前
GraphQL:从数据查询到应用架构的范式演进
java·人工智能·python·ai
Seven976 小时前
剑指offer-52、正则表达式匹配
java
代码or搬砖7 小时前
RBAC(权限认证)小例子
java·数据库·spring boot
青蛙大侠公主7 小时前
Thread及其相关类
java·开发语言
Coder_Boy_7 小时前
DDD从0到企业级:迭代式学习 (共17章)之 四
java·人工智能·驱动开发·学习
2301_768350237 小时前
MySQL为什么选择InnoDB作为存储引擎
java·数据库·mysql
派大鑫wink7 小时前
【Java 学习日记】开篇:以日记为舟,渡 Java 进阶之海
java·笔记·程序人生·学习方法