-
@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
@import 导入的一个或多个@Configuration类,允许导入@Configuration类,ImportSelector和importbeandefinitionregistry实现,以及常规组件类,类似于AnnotationConfigApplicationContext.register,应该使用@Autowired注入来访问在导入的@Configuration类中声明的@Bean定义 (通俗理解就是把符合条件的类加载到IOC容器中)
- @ComponentScan
可以指定basepackagclasses或basePackages来定义要扫描的特定类或者包,假设不指定,从声明该注释的类的包中进行扫描()
一般我们的启动类都是放在和服务层,控制层同一层级(即同一个包下),只要在启动类加了@SpringBootApplication注解,其中的@ComponentScan注解默认会扫描该注释的类同一个包下的所有,如图:则会扫描resume包下的所有
进一步?若存在多模块的调用,比如为了减少代码的冗余,我新建一个模块是放一些公共使用的类,例如统一拦截处理controller层的抛出的异常,对controller层返回的数据做统一处理,若每写一个模块就要写一次这个代码 就会重复,那单独成一个公共模块 应该怎么实现呢? @SpringBootApplication注解中的@ComponentScan只扫描他所在包的所有,那就需要把@ComponentScan单独的进行注解,此时外面的注解就会覆盖@SpringBootApplication注解中的@ComponentScan 把@ComponentScan单独出来 就会灵活许多
如下图:wxresume模块向使用publicapi模块的UnifiedAdivice统一处理controller层返回的数据,则是就需要在启动wxresume模块时 把publicapi模块中的Response包下的类扫描进去
如何扫描进去?在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);
}
}
复制代码