第一天学习springBoot,谈谈自己的理解

SpringBoot

  1. springBoot集成了web容器,我们只需要运行一个主程序就可以实现一个wen项目的运行。

  2. 需要添加springBoot这个父工程的依赖,才能对启动器的版本进行管理。springBoot里面已经帮助我们把我们需要启动器的版本管理好了,我们只需要引入需要的启动器就可以,不需要指明启动器的版本。

  3. 父工程坐标

  4. 启动器(我们并没有在这里指定版本信息。因为SpringBoot的父工程已经对版本进行了管理了。)
    启动器里面包括我们需要的各种jar包及其自动配置类(spring没有配置自动配置的),当我们引入这个启动器的依赖时,就会触发springBoot为其定义的自动配置,通过在application.yml里面配置属性值,就会被读取,然后在@ConfigurationProperties(prefix = “jdbc”)这样的属性读取类读取我们配置的属性,然后在@Configuration
    @EnableConfigurationProperties(JdbcProperties.class)这两个注解的类中进行注入属性,然后通过@bean注解的方法进行创建对象,放到ioc容器中。

  5. 我们如果配置了启动器,就会被主方法里面识别我们需要做的事情,如果我们没有配置属性值,就会使用默认的属性值,一般不要乱引入启动器,只引入需要的即可。

  6. 启动类(项目运行的主方法)
    启动类放的位置:一般放在我们创建的包的目录:比如放在cn.itcast.leyou的目录下,与pojo,service,controller在同一目录下,因为需要在包扫描创建对象放在ioc容器中,扫描的是启动类同级的包及其子包中的带注解的类(针对@controller,@service,@component注解),mapper接口需要在启动类上配置包扫描。

  7. @SpringBootConfiguration注解
    这个注解的作用就是声明当前类是一个配置类,然后Spring会自动扫描到添加了@Configuration的类,并且读取其中的配置信息。而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一般我们无需自己添加。

  8. @EnableAutoConfiguration注解
    第二级的注解@EnableAutoConfiguration,告诉SpringBoot基于你所添加的依赖,去“猜测”你想要如何配置Spring。比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖。此时自动配置就知道你是要开发一个web应用,springBoot就会根据自动配置所以就帮你完成了web及SpringMVC的默认配置了!
    SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置,这些配置是否生效,取决于我们是否引入了对应库所需的依赖,如果有那么默认配置就会生效。

  9. @ComponentScan注解
    配置组件扫描的指令。提供了类似与context:component-scan标签的作用
    通过basePackageClasses或者basePackages属性来指定要扫描的包。如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包

10.springBoot默认配置生效原因
springBoot帮助我们设置了默认配置,并且根据你引入的依赖来生效对应的默认配置

其实在我们的项目中,已经引入了一个依赖:spring-boot-autoconfigure,其中定义了大量自动配置类:几乎涵了现在主流的开源框架,没有我们需要对应的话,我们引入启动器的会加入进来(比如mybatis,通用mapper等)

一个配置类的配置图解:
 @Configuration:声明这个类是一个配置类
 @ConditionalOnWebApplication(type = Type.SERVLET)
ConditionalOn,翻译就是在某个条件下,此处就是满足项目的类是是Type.SERVLET类型,也就是一个普通web工程,显然我们就是
 @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
这里的条件是OnClass,也就是满足以下类存在:Servlet、DispatcherServlet、WebMvcConfigurer,其中Servlet只要引入了tomcat依赖自然会有,后两个需要引入SpringMVC才会有。这里就是判断你是否引入了相关依赖,引入依赖后该条件成立,当前类的配置才会生效!
 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
这个条件与上面不同,OnMissingBean,是说环境中没有指定的Bean这个才生效。其实这就是自定义配置的入口,也就是说,如果我们自己配置了一个WebMVCConfigurationSupport的类,那么这个默认配置就会失效!
总之:

SpringBoot为我们提供了默认配置,而默认配置生效的条件一般有两个:

  1. 我们引入了依赖,满足了springboot其对应设置的配置类的条件。
  2. 我们没有属性值进行重新设置,也就是在application.yml中没有设置其相关的属性值。

想用自己的属性配置:

  1. 引入其对应的启动器,

  2. 在application.yml重新设置了属性值。

  3. 拦截器:

  4. 首先我们定义一个拦截器:

  5. 然后,我们定义配置类,注册拦截器:

总结: 如果你想要保持Spring Boot 的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现WebMvcConfigurer,并且添加@Configuration注解,但是千万不要加@EnableWebMvc注解。如果你想要自定义HandlerMapping、HandlerAdapter、ExceptionResolver等组件,你可以创建一个WebMvcRegistrationsAdapter实例 来提供以上组件。
如果你想要完全自定义SpringMVC,不保留SpringBoot提供的一切特征,你可以自己定义类并且添加@Configuration注解和@EnableWebMvc注解

11.Mapper接口的动态代理对象(供service调用)
需要注意,这里没有配置mapper接口扫描包,因此我们需要给每一个Mapper接口添加@Mapper注解,才能被识别。

我们也可以不加注解,而是在启动类上添加扫描包注解

@SpringBootApplication
@MapperScan(“com.leyou.mapper”)
public class Application {
public static void main(String[] args) {
// 启动代码
SpringApplication.run(Application.class, args);
}
}

猜你喜欢

转载自blog.csdn.net/qq_35336425/article/details/82825405