@SpringBootApplication中的注解

  • @Target(ElementType.TYPE):指示适用注释类型的上下文(即注解的作用目标)这里是接口、类、枚举、注解

  • @Retention(RetentionPolicy.RUNTIME):指示具有注释类型的注释要保留多长时间,这里注解是将被JVM

留,所以在运行时被JVM或其他使用反射机制的代码所读取和使用

  • @Documented 指示默认情况下,带有类型的注释将由javadoc和类似工具记录

  • @Inherited 指示自动继承注释类型(即子类可以继承父类)

接下来的三个注解是@SpringBootApplication的核心

  • @SpringBootConfiguration

官方解释:指示一个类提供Spring Boot应用程序@Configuration。可以用作Spring的标准@Configuration注释的替代,以便可以自动找到配置(例如在测试中)。

应用程序应该只包含一个@SpringBootConfiguration,大多数惯用的SpringBoot应用程序将从 @SpringBootApplication继承它。(简单理解:@SpringBootConfiguration他其实就是标识一个配置类,在spring中@Configuration来标识一个注释类,而在springboot中就用@SpringBootConfiguration作为了替代 点进它的源码发现 它有@Configuration注解,可以理解就是继承了@Configuration)

  • @EnableAutoConfiguration: 自动配置,尝试猜测和配置您可能需要的bean

@SpringBootApplication中的注解_第1张图片

@import 导入的一个或多个@Configuration类,允许导入@Configuration类,ImportSelector和importbeandefinitionregistry实现,以及常规组件类,类似于AnnotationConfigApplicationContext.register,应该使用@Autowired注入来访问在导入的@Configuration类中声明的@Bean定义 (通俗理解就是把符合条件的类加载到IOC容器中)

  • @ComponentScan

可以指定basepackagclasses或basePackages来定义要扫描的特定类或者包,假设不指定,从声明该注释的类的包中进行扫描()

一般我们的启动类都是放在和服务层,控制层同一层级(即同一个包下),只要在启动类加了@SpringBootApplication注解,其中的@ComponentScan注解默认会扫描该注释的类同一个包下的所有,如图:则会扫描resume包下的所有

@SpringBootApplication中的注解_第2张图片

进一步?若存在多模块的调用,比如为了减少代码的冗余,我新建一个模块是放一些公共使用的类,例如统一拦截处理controller层的抛出的异常,对controller层返回的数据做统一处理,若每写一个模块就要写一次这个代码 就会重复,那单独成一个公共模块 应该怎么实现呢? @SpringBootApplication注解中的@ComponentScan只扫描他所在包的所有,那就需要把@ComponentScan单独的进行注解,此时外面的注解就会覆盖@SpringBootApplication注解中的@ComponentScan 把@ComponentScan单独出来 就会灵活许多

如下图:wxresume模块向使用publicapi模块的UnifiedAdivice统一处理controller层返回的数据,则是就需要在启动wxresume模块时 把publicapi模块中的Response包下的类扫描进去

@SpringBootApplication中的注解_第3张图片

如何扫描进去?在wxresume模块的启动类中加@ComponentScan注解 如图下:

@EnableEurekaClient

@MapperScan(“com.flscode.resume.mapper”)

@ComponentScan({“com.flscode.publicapi.Response”,“com.flscode.resume”})

@SpringBootApplication

public class WxresumeApplication {

public static void main(String[] args) {

SpringApplication.run(WxresumeApplication.class,args);

}

}

复制代码

static void main(String[] args) {

SpringApplication.run(WxresumeApplication.class,args);

}

}

复制代码

你可能感兴趣的:(程序员,经验分享,java,后端)