提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
底层注解
@Configuration
- 该注解的作用是告诉springboot该类是一个配置类。
- 配置类本身也是组件
- ProxyBeanMethod:代理bean的方法,如果该值为true,代表使用代理。在调用组件时,都回去容器中保存的组件中查询。保证注册的bean为单实例。该模式适用于组件依赖
如果该值为false,则为轻量级,多实例对象方式。该方式不会使用代理。该模式的springboot启动快,省去查询。
@Bean
是为了向容器中添加组件,配置类中使用@Bean标注方法在容器上注册组件,默认也是单实例的
@Configuration
public class MyConfig {
@Bean
//方法名就是bean的id ,返回值类型就是组件类型。返回的值就是组件在容器中的实例
public Cat cat01() {
return new Cat("tom",18);
}
@Bean
//可以在bean中自定义方法名
public Pet pet01() {
return new Pet("dog");
}
}
@import
可以自动调用该组件的无参构造器,向容器中注册该组件。在容器中的名字就是组件的全类名。
在该配置类上方加import注解
@Import(Pet.class)
@Configuration(proxyBeanMethods = false)
public class MyConfig {
在该主类中获取该类型组件的名称
String[] names = context.getBeanNamesForType(Pet.class);
for (String name : names) {
System.out.println(name);
}
结果
com.bao.bean.Pet
pet01
@Conditional
条件装配:满足Conditionnal指定的条件,则进行组件注入
和@Bean一起使用,对bean注入限制条件 在配置类中使用,对整个配置类的bean注入添加条件。
例如:
@Configuration(proxyBeanMethods = false)
@ConditionalOnBean(name = "tom")
public class MyConfig {
@Bean
//方法名就是bean的id ,返回值类型就是组件类型。返回的值就是组件在容器中的实例
public Cat cat01() {
return new Cat("tom",18);
}
@Bean
//可以在bean中自定义方法名
public Pet pet01() {
return new Pet("dog");
}
}
该注解表示bean的注入基于,组件中有name = tom的组件,否则bean注入无效
@importResource
可以导入资源文件,例如可以在使用xml配置bean时,在配置类中导入xml文件
@ConfigurationProperties
第一种方式:
用来实现配置绑定,当我们需要灵活的将一些bean的值进行变换时,可以将该值写到properties中,然后通过该注解将bean和properties进行绑定。
例如:
@Component("myCar")
@ConfigurationProperties(prefix = "mycar")
public class Car {
private String brand;
private Integer price;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
", price=" + price +
'}';
}
}
mycar.brand=BYD
mycar.price=100000
第二种方式:
在配置类中使用@EnableConfigurationProperties(),开启属性配置功能,其中的值为bean的类型,即可开启对应的属性配置,并把这个bean注册到容器中。在bean类中即可以省去@Component注解
@ConfigurationProperties(prefix = "mycar")
public class Car {
private String brand;
private Integer price;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
", price=" + price +
'}';
}
}