【第9章】SpringBoot中Bean的扫描和注册
文章目录
- 前言
- 一、bean扫描
- 1. @SpringBootApplication
- 2. @ComponentScan
- 二、bean注册
- 1.应用bean注册
- 2.外部bean注册
- 2.1 @Bean
- 2.2 @Import
- 3.bean注册条件
- 3.1 @ConditionalOnProperty
- 3.2 @ConditionalOnMissingBean
- 3.3 @ConditionalOnBean
- 总结
前言
注册bean对象相关内容。
一、bean扫描
1. @SpringBootApplication
springboot应用程序会扫描启动类同级及子目录下的java文件。
2. @ComponentScan
@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
@Configuration
public class DruidConfig {@Bean@ConfigurationProperties("spring.datasource.druid")public DataSource dataSource(){return new DruidDataSource();}
}
2.2 @Import
@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
@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
@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
@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();
}
总结
回到顶部