为了能深入地掌握Spring Boot的自动配置原理,我们来看一下Spring Boot的一些底层注解,要知道它们是如何完成相关功能的。首先,我们来看一下怎么给容器里面添加组件。
我在这儿准备了两个组件,它们分别是:
- 用户,即User类
package com.meimeixia.boot.bean;
/**
* @author liayun
* @create 2021-04-23 19:14
*
* 用户
*/
public class User {
private String name;
private Integer age;
public User() {
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
- 宠物,即Pet类
package com.meimeixia.boot.bean;
/**
* @author liayun
* @create 2021-04-23 19:16
*
* 宠物
*/
public class Pet {
private String name;
public Pet() {
}
public Pet(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Pet{" +
"name='" + name + '\'' +
'}';
}
}
如果我们是用以前原生的Spring来把以上这两个组件添加到容器中,那么我们应该是要这么来做的,即首先来创建一个Spring的配置文件,例如beans.xml,记住该文件得在src > main > resources目录下哟,然后使用<bean>标签来向容器中添加组件,如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user01" class="com.meimeixia.boot.bean.User">
<property name="name" value="zhangsan"></property>
<property name="age" value="18"></property>
</bean>
<bean id="cat" class="com.meimeixia.boot.bean.Pet">
<property name="name" value="tomcat"></property>
</bean>
</beans>
现在,容器中就会有两个组件了,一个是User组件,一个是Pet组件。当然了,这是我们使用以前Spring XML配置文件的方式来向容器中注册组件的。
但是,我们现在使用的是Spring Boot,它已经不推荐我们使用Spring XML配置文件的这种方式了,既然不用Spring XML配置文件,那么它是怎么给容器中添加组件的呢?笨蛋,当然是使用注解呗,而且Spring Boot还有好几种办法向容器中注册组件呢!这里,我们先来看第一种办法吧!
由于我们使用了Spring Boot之后,已经不再写配置文件了,所以要向容器中注册组件,我们得使用Spring Boot底层一个叫@Configuration的注解了,该注解翻译过来就是配置的意思。不妨我们就新建一个类,例如MyConfig,然后我们给该类上标注上@Configuration这么一个注解,如下所示。
package com.meimeixia.boot.config;
import org.springframework.context.annotation.Configuration;
/**
* @author liayun
* @create 2021-04-23 19:42
*
*/
@Configuration // 告诉Spring Boot这是一个配置类 == 配置文件
public class MyConfig {
}
其实,我们这样的做法(即创建一个类,然后在类上标注@Configuration注解)就是类似于创建了一个配置文件,在类上标注@Configuration注解,就相当于告诉Spring Boot这个文件是一个Spring XML配置文件。你现在明白了吧!@Configuration注解就是来告诉Spring Boot它标注的类是一个配置类的。
以前,我们能在Spring XML配置文件里面能做什么,我们现在也能做什么。以前我们是在配置文件里面使用<bean>标签向容器中添加组件的,现在,在配置类里面我们就不能写标签了,而是要写一个方法,比如现在想要向容器中添加一个User组件,我们就得在MyConfig配置类里面编写如下这样一个方法。
package com.meimeixia.boot.config;
import com.meimeixia.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author liayun
* @create 2021-04-23 19:42
*
*/
@Configuration // 告诉Spring Boot这是一个配置类 == 配置文件
public class MyConfig {
@Bean // @Bean注解是给容器中添加组件的。添加什么组件呢?以方法名作为组件的id,返回类型就是组件类型,返回的值就是组件在容器中的实例
public User user01() {
User zhangsan = new User("zhangsan", 18);
return zhangsan;
}
}
可以看到