本篇博客主要是介绍SpringBoot与底层源码相关的一些注解,只探究其作用,不做底层分析,本篇博客的目的是为之后SpringBoot源码分析做基础,当然其中相当一部分注解在平时使用SpringBoot的时候也经常会用到,这里就作为一个简单的复习。
有什么用?
告诉SpringBoot,这是一个配置类,等同于配置文件
配置类本身也是组件
属性
@Configuration(proxyBeanMethods = true):
它的作用是,如果为true,SpringBoot每次调用组件都会检查容器中是否存在该组件,如果存在,就直接返回该组件,即组件间就会存在依赖关系,否则,SpringBoot每次调用组件都不会检查,而是直接new一个新的,这种方式启动速度快,更轻量,但组件间不存在依赖关系
例子
@Configuration(proxyBeanMethods = true)
public class MyConfig {
//...
}
有什么用?
@Configuration类中@Bean的方法就类似于配置文件种的bean标签,以方法名作为组件的id,返回类型就是组件类型,返回的值,就是组件在容器中的实例,默认是单实例的
属性
@Bean(“name”):定义组件的id为name
例子
@Configuration
public class MyConfig {
@Bean("tom")
public Pet tomcatPet(){
return new Pet("tomcat");
}
}
与Spring相同,用来告诉SpringBoot这是一个组件
有什么用?
用来向容器中导入我们想导入的组件,可以用在任何地方,调用容器的无参构造器自动创建出这两个类型的组件,默认组件的名字就是全类名
适用场景
当我们想自动控制依赖注入时,可以在加上这个注解,表示在这个组件注入的时候,同时注入它的依赖
例子
@Import({User.class, DBHelper.class}) //导入组件User、DBHelper
@Configuration
public class MyConfig {
//...
}
有什么用?
条件装配:满足Conditional指定的条件,则进行组件注入,它是一个父注解,由它派生出了很多其它的注解
适用场景
一个组件的引入必须在另一个组件之后时,可以使用条件装配
例子
@ConditionalOnMissingBean(name = "tom") //如果容器中没有tom组件,则创建该组件
@Configuration
public class MyConfig {
//...
}
有什么用?
用来引入由xml方式配置的组件
属性
@ImportResource(“classpath:beans.xml”):用来引入classpath下的beans.xml中配置的组件
适用场景
用来兼容一些还在用xml方式引入组件的老系统
例子
@ImportResource("classpath:beans.xml") //导入xml配置
@Configuration
public class MyConfig {
//...
}
有什么用?
配置绑定,把properties文件中的某个或某几个配置自动配置到我们注解的类上面
注意:只有在容器中的组件,才会拥有SpringBoot提供的强大功能
属性
@ConfigurationProperties(prefix = “mycar”):把核心配置文件application.properties中,前缀为mycar的属性与类中的同名属性一一绑定
例子
@ConfigurationProperties(prefix = "mycar")
public class Car {
//...
}
有什么用?
与@ConfigurationProperties类似,开启配置绑定,并把配置的组件自动注入到容器中
注意:只能写在配置类中
属性
@EnableConfigurationProperties(Car.class):把Car中的属性进行自动配置并注入到容器中
适用场景
用来配置且注入没有用@Component的第三方包中的类
例子
@EnableConfigurationProperties(Car.class) //1.开启Car配置绑定功能, 2.把这个Car这个组件自动注册到容器中
@Configuration
public class MyConfig {
//...
}