【SpringBoot5】SpringBoot如何找到我们写的类的

目录

1.Spring如何加载我们的类的

2.Spring注解驱动发展史与核心注解介绍

2.1 Spring驱动发展简史

 2.2 @Configuration和@Bean注解

2.3 @Import以及相关注解

3.看看SpringBoot的启动的入口

3.1 @SpringBootConfiguration注解

 3.2 @EnableAutoConfiguration注解

 4.SpringBoot自动配置原理


1.Spring如何加载我们的类的

相信在刚开始学习Spring的时候,我们都学过如何用spring的配置来指定类之间的关系,例如:

    <bean id="englishMessageProvider" class="innerspring.com.decoupled.EnglishMessageProvider"/>
    <bean id="standardOutMessageService" class="innerspring.com.decoupled.StandardOutMessageService"
          p:messageProvider-ref="englishMessageProvider"/>

后面的class就是我们自己实现的业务类,例如:

package innerspring.com.decoupled;

public class EnglishMessageProvider implements IMessageProvider {

    public EnglishMessageProvider(){
        System.out.println(" --> EnglishMessageProvider: constructor called");
    }

    @Override
    public String getMessage() {
        return "Hello World!";
    }
}

我们在使用的时候只要这么写就行了:

public class HelloWorldSpringDI {
    public static void main(String... args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext
           ("spring/app-context.xml");
        IMessageService mr = ctx.getBean("standardOutMessageService", IMessageService.class);
        mr.execute();
    }
}

初次接触Spring的时候,通过上面的代码,并且仔细研究ClassPathXmlApplicationContext的代码,可以逐步梳理出Ioc、AOP等的完整过程,虽然复杂,如果花时间多就足以将其完整搞清楚是如何加载的。

不过呢使用XML的方式有一个很大的问题,就是如果我们的类非常多非常复杂,这时候xml的配置就无比庞大,而如果我修改了版本或者实现等等,此时维护xml文件就是个灾难。

为此Spring发展的一个重要途径就是推广使用注解,减少xml等配置的内容。例如上面我们定义的bean:

 <bean id="englishMessageProvider" class="innerspring.com.decoupled.EnglishMessageProvider"/>

这里的关键是class里指定的类的路径和类名,而前面的id就是类名的小写,所以我们只要找到类就完全能自己创建出这么一个类来。

那不用配置又该如何找到我们的类呢?方法是用注解+包扫描

凡是用过SpringBoot的同学应该都知道,我们写了一个服务之后,都需要在头部加上这么一个注解,例如@C

相关推荐

  1. SpringBoot5SpringBoot如何找到我们

    2024-02-19 11:46:03       45 阅读
  2. springboot使用配置文件配置我们自己配置

    2024-02-19 11:46:03       58 阅读
  3. 如何得一手优雅规范SpringBoot 接口?

    2024-02-19 11:46:03       32 阅读
  4. springboot源码阅读顺序

    2024-02-19 11:46:03       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 11:46:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 11:46:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 11:46:03       87 阅读
  4. Python语言-面向对象

    2024-02-19 11:46:03       96 阅读

热门阅读

  1. android pdf框架-3,基于recyclerview修改

    2024-02-19 11:46:03       64 阅读
  2. 关于Http和Https

    2024-02-19 11:46:03       52 阅读
  3. CF1781 D. Many Perfect Squares [数学题]

    2024-02-19 11:46:03       53 阅读
  4. OpenCV中saturate_cast模板函数

    2024-02-19 11:46:03       50 阅读
  5. 1.函数模板基础

    2024-02-19 11:46:03       50 阅读
  6. 计算机网络课后第一章问答题

    2024-02-19 11:46:03       48 阅读