一、什么是Spring容器?
Spring容器,也称Spring Ioc容器或bean容器,是Spring框架的核心,Srping容器对很多人来说是比较抽象难以理解的;
1、从概念层面讲,对象的创建、初始化以及销毁的整个生命周期都交由Spring容器去管理,大大减少了开发的工作量;
2、从代码层面讲,一个Spring容器就是一个实现了ApplicationContext接口的类的一个实例,即一个Spring容器就是一个AlicaitonContext(对象)
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Cat democat = context.getBean("cat",Cat.class);
如上图,context就是创建的一个Spring容器,容器里装载着applicationContext.xml文件中配置的所有对象。
二、Spring容器是如何管理对象的
首先先介绍一下两个概念:IOC(控制反转)、DI(依赖注册)。
IOC:将对象的创建、初始化和销毁的整个生命周期都交给容器去做,而不是再有程序员自己去new了,所以称之为控制反转,这个概念顾名思义很好理解,这也与上面介绍Spring容器的概念呼应。
DI:Spring在启动的时候会实例化所需要的类,这里以实例化A类为例,若存在A类依赖于B类的情况,在实例化A对象的过程中会首先实例化B类,再实例化A类,依赖传入A类的方式必须是通过A类的构造函数,因此A类在实例化的过程中会接收并保存依赖的对象。
//B类
public class Car{
private String color;
private brand;
public Car(String color,String brand){
this.color = color;
this.brand = brand;
}
}
//A类,依赖于B类
public class Boss{
private Car car;
public Boss(Car car){
this.car = car;
}
}
三、SpringBoot中创建bean的几种方式
不同于Spring框架中bean的配置都是在xml中进行的,比较繁琐,springboot中主要采用注解的方式实现bean的创建
1、注解形式:@Component、@Service、@Repository、@Controller
Spring运行时,容器会自动扫描加载被这些注解修饰的类,自动生成bean,并保存到Spring容器中
2、@Bean形式:配合@Configuration注解创建bean
@Configuration
public class BeanLoadConfig {
@Bean
public ConfigDemoBean configDemoBean() {
return new ConfigDemoBean();
}
}
@Configuration相当于xml文件中的beans标签,@Bean相当于bean标签,方法名相当于bean标签中的id,方法的返回值注入到sprig容器中,相当于class的一个实例。
具体可参考该博文,简单易懂:https://blog.csdn.net/luzhensmart/article/details/90666380
四、Springboot中bean的使用方式
上面讲到了Springboot中bean的创建过程,下面就将如何在项目中使用bean。
1、使用@AutoWired和@Resource注解实现自动装配,如下图所示:
被@Controller修饰的CaseManagerController类在实例化为bean对象的过程中需要先对依赖CoreAutoTestCase类进行实例化,CoreAutoTestCase类实例化生成bean后,通过@Autowired或@Resource注解,装配注入到当前的bean对象中,也就是说CaseManagerController类实例化bean对象中保存有CoreAutoTestCase类的实例化bean对象信息。因为在被@controller修饰的类中几乎是不存在构造函数的,我们上一章节讲到依赖只能通过构造函数注入到当前的bean中,因此@AutoWired和@Resource注解也相当于起到了一个这样的一个构造函数的作用,下面我们就要将通过构造函数的方式使用bean对象了。
@Controller
public class CaseManagerController {
@Autowired
private CoreAutoTestCase coreAutoTestCase;
@Autowired
private CoreAutoTestPlanCaseRelationshipMapper relationshipMapper;
.................
2、构造方法:就是在构造方法中传入Bean对象来初始化
@Controller
public class CaseManagerController {
private CoreAutoTestCase coreAutoTestCase;
public CaseManagerController(CoreAutoTestCase coreAutoTestCase){
this.coreAutoTestCase = coreAutoTestCase;
}
.................
-----------未完,待补充。
原博文链接:http://www.54gwz.cn/article/1591175285