junk_ndsc 2021-03-28 15:45 采纳率: 63.9%
浏览 167
已采纳

关于Spring中@import注解的作用

在网上搜索了@import的使用,但是没找到想要的答案,所以请教下各位@import可以用来导入相应的配置类,但是使用Spring的话其配置类不是已经注册到spring容器中么,为什么还要加上@import进行导入?加上@import注解的作用是当前类在进行导入时需要引入其前置的配置所以才这么做的么?

  • 写回答

1条回答 默认 最新

  • 三岁丫 2021-03-28 18:56
    关注

    其实这个是特别灵活的,所以没有啥标准的用处。我给你举两个例子吧,你自己能理解就好。

    1. 引入三方的 Bean:SpringBoot 扫描 Bean 的时候,默认是扫描的所有同级的和子级的 package。那么如果有时候,想要使用引用一些外部 bean 的时候(比如三方包中的),可以通过 @SpringBootApplication 的 scanBasePackages 的值,但是其实你只想引入某一个 bean,那么就可以使用 @Import 将其引进来。例如在 Hutool 中有一个 SpringUtil 这个类,它功能其实就是你熟知的 SpringContextUtil 一样,但是如果你不声明 @EnableSpringUtil 的话,那么 Spring 是扫描不到这个 SpringUtil 的,就不会将其放入到 Spring 容器中,也就无法注入 applicationContext。

    2. 作为开关:其实在使用 Springboot 的时候,你可能会注意到一些 @EnableDiscoveryClient、@EnableCaching、@EnableAsync 等这种注解,它们的作用就是起到一个开关的作用,即你使用了它们就开启了对应的功能,那么它们是怎么实现的呢,其实就是在里面声明了 @Import(xxx),只要引进来了,一般引入进来的是 xxxselector 类(类名不是强制的 selector 结尾,根据具体的作用来),它们的作用就是完成相应的功能(其实这个说的不完全,反正就是启用了对应的功能),比如可以进行服务发现了,缓存启用了,@Async 注解生效了等等。(如果不声明 @EnableAsync 单独使用 @Async 是不会生效的,其他的同理)

     

    注:还是和开头说的一样,没有任何标准用法,你看懂了这两个例子,知道是干嘛用的就行了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突