Spring原理简述

一、什么是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
-----------未完,待补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值