转载自 https://blog.csdn.net/zzzgd_666/article/details/80310840

首先,我们来看看@SpringBootApplication注解代码,如下代码,它分别继承了3个注解

1、@EnableAutoConfiguration
2、@ComponentScan
3、@SpringBootConfiguration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
//.....
}

所以它同时具备了@ComponentScan、@EnableAutoConfiguration的功能。

很多Spring Boot开发者总是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。 由于这些注解被如此频繁地一块使用(特别是你遵循以上最佳实践时) , Spring Boot提供一个方便的 @SpringBootApplication 选择。该 @SpringBootApplication 注解等价于以默认属性使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 。

main应用类的位置

一般来说, main应用类应该放在其他类上面的根包(root package) 中,此时@ComonentScan注解不需要配置basePackage属性,这个包下的所有子包和子类都会被扫描。

下面是一个典型的结构:

cn+- zgd+- project+- Application.java|+- domain| +- Customer.java| +- CustomerRepository.java|+- service| +- CustomerService.java|+- web+- CustomerController.java
  • 1

@EnableAutoConfiguration

这个注解是Spring应用程序上下文的自动配置,尝试猜测和配置您可能需要的bean。自动配置类通常基于类路径和定义的bean应用。例如,如果你有 tomcat-embedded.jar在您的类路径中,你可能会想要一个TomcatEmbeddedServletContainerFactory(除非你定义自己的EmbeddedServletContainerFactory bean)。

当然我们也可能不需要他自动配置,这时候需要用排除的方式:

@Configuration
//exclude= {DataSourceAutoConfiguration.class} 通过排除属性来禁止DataSourceAutoConfiguration的配置
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
@ComponentScan
public class Application {
.....

Spring Beans和依赖注入

你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖。 这里经常使用 @ComponentScan 注解搜索beans, 并结合 @Autowired 构造器注入。 
如果使用上面建议的结构组织代码(将应用类放到根包下) , 你可以添加 @ComponentScan 注解而不需要任何参数。 你的所有应用程序组件(@Component , @Service , @Repository , @Controller 等) 将被自动注册为Spring Beans。

SpringBoot的@SpringBootApplication注解和其他几个注解相关推荐

  1. springboot解决跨域CROS问题,用注解@CrossOrigin

    项目是springboot框架,前后端分离,需要跨域,当前前端可以用JSONP解决,但是java端如何解决呢? 因为是springboot框架,所以好多都可以用注解解决问题,所以就用到了@CrossO ...

  2. 注解开发不方便_注解(上)

    注解,和反射一样,是Java中最重要却最容易被人遗忘的知识点.哪怕Spring.SpringMVC.SpringBoot等框架中充满了注解,我们还是选择性地忽视它.很多人不明白它是怎么起作用的,甚至有 ...

  3. @controlleradvice注解作用_springboot的常用注解分析

    在spring boot中,摒弃了spring以往项目中大量繁琐的配置,遵循约定大于配置的原则,通过自身默认配置,极大的降低了项目搭建的复杂度.同样在spring boot中,大量注解的使用,使得代码 ...

  4. spring boot注解_Spring-boot(二)注解

    首先从启动处注解: @SpringBootApplication 查看源码可知为复合注解: SpringBootConfiguration:这个是spring-boot定义的注解 @Target({E ...

  5. (十一)Spring 基础注解(对象创建相关注解、注入相关注解)

    注解编程 目录 注解基础概念 注解的作用 Spring 注解的发展历程 Spring 基础注解(Spring 2.x) 对象创建相关注解 @Component @Repository.@Service ...

  6. @qualifier注解_常见的 Spring 注解概览

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 从Java5.0开始,Java开始支持注解.Spring做为Java生态中的领军框架,从2.5版本后也开始支持注解.相比起之前使用xml来配 ...

  7. 【Spring 基础注解】对象创建相关注解、注入相关注解、注解扫描详解

    Spring 基础注解(2.x) 注解基础概念 注解的作用 Spring 注解的发展历程 对象创建相关注解 @Component @Repository.@Service.@Contoller @Sc ...

  8. java 注解开发_Java中的注解到底是如何工作的?

    作者:人晓 www.importnew.com/10294.html 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Over ...

  9. 注解提高篇:自定义注解处理器(APT)

    ## 0x01 继承AbstractProcessor抽象类 当定义好Annotation注解后,接下来就需要一个注解处理器来处理我们的自定义注解了.实现Java Annotation一般需要继承Ab ...

  10. java 解析注解_Java知识点总结(注解-解析注解)

    Java知识点总结(注解-解析注解) @(Java知识点总结)[Java, 注解] 通过反射获取类.函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑. 使用注解步骤: 定义注解 类中使用注 ...

最新文章

  1. x86终端登录horizon view设置
  2. 换了你你又会杀了谁(zz)
  3. mysql batch insert 遇到错误跳过_这是MySQL的bug吗?
  4. 最早做无糖茶的统一茶里王,是怎样错过年轻人的?
  5. 计算机一级单元格公式设置错误是什么原因,excel表格公式出错怎么解决,电子表格求和出错...
  6. 编辑器Sublime Text 2
  7. java ee maven_真正释放Maven和Java EE的强大功能
  8. 2018全国计算机音乐大赛一等奖,2018全国数字音乐大赛总决赛精彩无限!小学员的技能震惊评委!...
  9. 同事删库跑路后,我连表名都不能修改了?
  10. ncurses输入函数:字符+字符串的输入
  11. [vscode] python debugging
  12. python类型检查_python【数据类型检查】
  13. 华数机器人编程语言_招新 | 海大最「酷」的科创团队,确定不来了解一下吗?...
  14. Mysql 数据库中Where 关键字的使用
  15. linux 软件安装命令
  16. Ctrix-XenApp中误删应用服务器,如何重新添加
  17. .NET BackgroundWorker
  18. 与班尼特·胡迪一起攻破浮空城 (HZNU-2264)
  19. 盘点2016年人工智能与深度学习领域的十大收购
  20. 【民生】2011,骗子仍在行动

热门文章

  1. 梅朵是藏语鲜花的意思
  2. Min_25筛学习Tip+链接
  3. 【网络编程】之六、选择select
  4. 使用CArchive类进行序列化
  5. Python中的高阶变量
  6. 【今晚七点半】:爱奇艺DRM探索之路
  7. 对话OTTVerse创始人Krishna Rao Vijayanagar:创业之初,挑战与机遇并存
  8. 用Elevator优化AV1视频播放
  9. 深度学习赋能视频编码
  10. 使用级联SFU改善媒体质量和规模