SpringBoot2.X-常用注解
1、javaConfig配置
@Configuration
public class MoonBookConfiguration {
// 如果一个bean依赖另一个bean,则直接调用对应JavaConfig类中依赖bean的创建方法即可
// 这里直接调用dependencyService()
@Bean
public BookService bookService() {
return new BookServiceImpl(dependencyService());
}
@Bean
public OtherService otherService() {
return new OtherServiceImpl(dependencyService());
}
@Bean
public DependencyService dependencyService() {
return new DependencyServiceImpl();
}
}
2. @ComponentScan
可以通过使用basePackages等属性来指定@ComponentScan自动扫描的范围,如果不指定,默认从声明@ComponentScan所在类的package进行扫描(当前包以及子包)。正因为这样,SpringBoot的启动类都默认推荐在src/main/java下。
3. @Import
@Import注解用于导入配置类,举个简单例子:现在还有一个配置类,比如MoonUserConfiguration,这个配置类中有一个bean依赖于MoonBookConfiguration中的bookService,那么如何将这两个bean组合在一起?借助@Import即可。
@Configuration
// 可以同时导入多个配置类,比如:@Import({A.class,B.class})
@Import(MoonBookConfiguration.class)
public class MoonUserConfiguration {
@Bean
public UserService userService(BookService bookService) {
return new BookServiceImpl(bookService);
}
}
注:在4.2之前,@Import注解只支持导入配置类。但是在4.2之后,它支持导入普通类,并将这个类作为一个bean的定义注册到IOC容器中。
4. @Value和@PropertySource(“classpath:jdbc.properties”)
@Value注解的作用就是讲配置文件中的属性读取出来,有@Value("${}")和@Value("#{}")两种方式。@PropertySource()注解一般用于来指定配置文件。
5. @ConfigurationProperties和@EnableConfigurationProperties
当某些属性的值需要配置时,我们一般会在application.properties文件中新建配置项,然后在bean中使用@Value注解来获取配置的值,但是@Value的可扩展性较差,因为在每个地方都要写上@Value(“xxx”),如果xxx字符串改变,每个地方都要改变。因此SpringBoot提供了更优雅的实现方式。那就是@ConfigurationProperties注解。
@Component
// 还可以通过@PropertySource("classpath:jdbc.properties")来指定配置文件
@ConfigurationProperties("jdbc.mysql")
// 前缀=jdbc.mysql,会在配置文件中寻找jdbc.mysql.*的配置项
pulic class JdbcConfig {
public String url;
public String username;
public String password;
}
@Configuration
public class HikariDataSourceConfiguration {
@AutoWired
public JdbcConfig config;
@Bean
public HikariDataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl(config.url);
hikariConfig.setUsername(config.username);
hikariConfig.setPassword(config.password);
// 省略部分代码
return new HikariDataSource(hikariConfig);
}
}
@EnableConfigurationProperties注解表示对@ConfigurationProperties的内嵌支持,默认会将对应的Properties Class作为JavaBean注入到IOC容器中,即在响应的Properties类上不用加@Component注解。
== IDEA 提示: Spring Boot Configuration Annotation Processor not fount in classpath解决方案:==
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>