美文网首页
Spring原理简述

Spring原理简述

作者: 力先生的小屋 | 来源:发表于2020-06-10 15:27 被阅读0次

    一、什么是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

    相关文章

      网友评论

          本文标题:Spring原理简述

          本文链接:https://www.haomeiwen.com/subject/rllptktx.html