文章目录
容器功能
1.1 组件添加
- 法一: @Configuration
/**
* 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
* 2、配置类本身也是组件
* 3、proxyBeanMethods:代理bean的方法 (这是SpringBoot2对SpringBoot很大的不同)
* Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
* Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
* 组件依赖必须使用Full模式默认。其他默认是否Lite模式
*
*
*
*/
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
/**
* Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
* @return
*/
@Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
public User user01(){
User zhangsan = new User("zhangsan", 18);
//user组件依赖了Pet组件
zhangsan.setPet(tomcatPet());
return zhangsan;
}
@Bean("tom") //给容器中添加组件。以方法名作为组件的id。
public Pet tomcatPet(){
return new Pet("tomcat");
}
}
-
法二:@Bean、@Component、@Controller、@Service、@Repository 法一的方法新一些,这个方法老一些,这个方法是将注解标于要添加到bean中的那些类的上面。而法一是统一在MyConfig类中添加组件。
将注解t注解在一个类上,表示将此类标记为Spring容器中的一个Bean。
Spring为Controller-Service-Dao的分层模型分别提供了@Controller、@Service、@Repository注解,除此之外的组件使用@Component注解 -
其他注解1: @ComponentScan、@Import
@ComponentScan 的作用就是根据定义的扫描路径(否则扫描路径是主配置类的同级或下级目录),把符合扫描规则的类装配到spring容器中
@import的好处是可以引入外部类(非自己定义的类)
* 4、@Import({User.class, DBHelper.class})
* 给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
*
*
*
*/
@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
}
- 其他注解2: @Configuration (这个注解重要)
该注解放在配置类上表示,当容器中满足条件时,配置类中的组件才生效;
放在配置方法上的时候,表示的意思是当满足条件的时候配置方法才生效;
1.2 原生配置文件引入
-
@ImportResource
指以.xml结尾的配置文件,通过@ImportResource导入后SpringBoot进行解析,完成对应的组件注册
位置:在主配置类的上方。主要是为了兼容第三方,注入IOC。
@ImportResource("classpath:beans.xml")
public class MyConfig {}
1.3 配置绑定
-
@ConfigurationProperties (常见)
场景例子:我们习惯将经常爱变化的东西写在.properties配置文件中,比如与数据库相关的信息(连接池、URL等)配置到配置文件中,为了方便我们会将配置文件中的内容解析到JavaBean中。
配置绑定:两种方式
- @Component + @ConfigurationProperties(prefix=“mycar”)声明在要绑定的类的上方
- @ConfigurationProperties(prefix=“mycar”)声明在要绑定的类的上方;在配置类的上方声明@EnableConfigurationProperties(Car.class),开启对应类的配置绑定功能,并把Car这个组件自动注入到容器中;
/**
* 只有在容器中的组件,才会拥有SpringBoot提供的强大功能,所以先用@Component将Car绑定到容器中
*/
@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 +
'}';
}
}`
//一般使用这种方式
@EnableConfigurationProperties(Car.class) // 开启 Car 的属性配置并自动注入到容器中
public class MyConfiguration {
@ConfigurationProperties(prefix = "mycar")
public classCar {