一、Springboot:请求入口@SpringBootApplication
@EnableAspectJAutoProxy
@EnableScheduling
@EnableTransactionManagement
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

1、@SpringBootApplication注解

@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 {……
}

复合注解:包含@EnableAutoConfiguration、@ComponentScan、@SpringBootConfiguration

a 、@EnableAutoConfiguration:也是复合注解、借助@Import将所有符合自动配置条件的bean定义加载到Spring ioc 中。帮助springboot应用将所有符合条件的@configuration配置都加载到当前spring ioc。

@Import注解的使用。这个注解帮助我们将多个配置文件(可能是按功能分,或是按业务分)导入到单个主配置中,以避免将所有配置写在一个配置中

b、@ComponentScan:主要作用扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。是以前的<context:component-scan>(以前使用在xml中使用的标签,用来扫描包配置的平行支持)。可通过@ComponentScan 的basepackage等属性来指定扫描范围。(@SpringBootApplication(scanBasePackages = "com.ucredit")。如果不指定默认spring框架实现,从声明@ComponentScan所在的类的package进行扫描。所以springboot的启动类最好放在root package下。

c、@SpringBootConfiguration:继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。@SpringBootConfiguration注解类相当于spring配置bean的xml文件。

d、@Configuration

Spring是给予IOC的,在4.0之前的版本,通常都是程序依赖上下文xml文件来管理bean,尽管有了扫描配置后相对简单,然而java配置的方式不同于xml,通过注解能够更简单。下面我们通过这两种方式比较下。

  • xml中bean的定义
<beans><bean id="course" class="demo.Course"><property name="module" ref="module"/></bean><bean id="module" class="demo.Module"><property name="assignment" ref="assignment"/></bean><bean id="assignment" class="demo.Assignment" />
</beans>

  • 注解配置类
@Configuration
public class AppContext {@Beanpublic Course course() {Course course = new Course();course.setModule(module());return course;}@Beanpublic Module module() {Module module = new Module();module.setAssignment(assignment());return module;}@Beanpublic Assignment assignment() {return new Assignment();}
}

@Configuration,该注解配置在类上,告知Spring这个类是一个拥有bean定义和依赖项的配置类。@Bean注释用于定义Bean,该注解位于实例化bean并设置依赖项的方法上。方法名默认通beanId活默认名称相同,该方法返回类型是Spring注册的bean。总体来说就是告诉Spring容器加载这个配置,相对于xml,这个注解就是将*.xml配置进web.xml

e、@Import

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {/*** {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}* or regular component classes to import.*/Class<?>[] value();}

  • @Import 与xml配置方式下的 作用一样。支持导入的类型有: 
    一个或多个拥有 @Configuration 注解的配置类
  • ImportSelector 接口的实现类
  • ImportBeanDefinitionRegistrar 的实现类

1)、如果Import注解中Class为ImportSelector子类,通过invokeAwareMethods(selector)设置aware值,如果类型为  DeferredImportSelector则添加到deferredImportSelectors集合中,待前面的parser.parse(configCandidates)
 方法中processDeferredImportSelectors()处理;如果不是,则执行selectImports方法,将获取到的结果递归调用  processImports,解析selectImports得到的结果

2)、如果Import注解中Class为ImportBeanDefinitionRegistrar子类,则添加到importBeanDefinitionRegistrars中,注 意该部分的数据在执行完parser.parse(configCandidates)后调用this.reader.loadBeanDefinitions(configClasses)解 析,否则执行配置信息的解析操作。

public interface Car {public void print();
}
@Component
public class Toyota implements Car {@Overridepublic void print() {// TODO Auto-generated method stubSystem.out.println("I am Toyota");}}@Component
public class Volkswagen implements Car {@Overridepublic void print() {// TODO Auto-generated method stubSystem.out.println("I am Volkswagen");}}@Configuration
public class JavaConfigA {@Bean(name="volkswagen")public Car getVolkswagen(){return new Volkswagen();}
}@Configuration
public class JavaConfigB {@Bean(name="toyota")public Car getToyota(){return new Toyota();}
}@Configuration
@Import({JavaConfigA.class,JavaConfigB.class})
public class ParentConfig {//Any other bean definitions
}
public class ContextLoader {public static void main (String args[]){AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ParentConfig.class);Car car = (Toyota)context.getBean("toyota");car.print();car = (Volkswagen)context.getBean("volkswagen");car.print();context.close();}
}

转载于:https://www.cnblogs.com/keepruning/p/9289995.html

springboot系列(三) 启动类中关键注解作用解析相关推荐

  1. 【j360-boot】Spring-boot系列三(崩溃模式,不是你崩就是电脑崩)

    2019独角兽企业重金招聘Python工程师标准>>> j360-boot spring-boot入门工程之j360-boot:(欢迎star.fork) https://githu ...

  2. spring boot 通过配置文件控制是否启用启动类上的注解

    在开发过程中遇到了,需要根据配置文件来控制是否开启单点的问题.单点cas需要在spring的启动类上进行注解,所以需要通过配置文件来进行控制是否引入. @SpringBootApplication@E ...

  3. IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...

    使用IDEA项目添加Hibernate扩展,生成实体类并配置实体类中的注解 一.使用Hibernate自动生成实体类 1.在项目上右键,选择Add Framework Support找到 Hibern ...

  4. spring-boot框架dubbo在controlle中r注解@Reference注入service,但是调用方法时候,service报null空指针异常

    spring-boot框架dubbo在controlle中r注解@Reference注入service,但是调用方法时候,service报null空指针异常 参考文章: (1)spring-boot框 ...

  5. [darknet源码系列-3] 在darknet中,如何根据解析出来的配置进行网络层构建

    [darknet源码系列-3] 在darknet中,如何根据解析出来的配置进行网络层构建 FesianXu 20201120 at UESTC 前言 笔者在[1,2]中已经对darknet如何进行配置 ...

  6. python类初始化详解_python类中super() 的使用解析

    描述 super() 函数是用于调用父类(超类)的一个方法. super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO).重复 ...

  7. SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)...

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.了解SpringBoot的基本概念 2.具体内容 在之前所建立的 SpringBoot 项目只是根据官方文档实现的一个基础程 ...

  8. SpringBoot启动类的扫描注解的用法及冲突原则

    背景 SpringBoot 启动类上,配置扫描包路径有三种方式,最近看到一个应用上三种注解都用上了,代码如下: @SpringBootApplication(scanBasePackages ={&q ...

  9. @Transactional +自定义注解不生效_SpringBoot之路(三)SpringDataJpa中常用注解的使用...

    1 @Query注解详解及其用法 说明:本文的写作构建在笔者的SpringBoot之路(二)使用用Spring-Data-JPA访问数据库进行基本的CRUD操作这篇文章的基础之上. @Query注解在 ...

最新文章

  1. 跨越十年,我的重要时刻它从未离开过
  2. java jdk实现快速排序_Java实现快速排序过程分析
  3. CF1303F - Number of Components(并查集)
  4. LeetCode 2012. 数组美丽值求和
  5. linux如何打开url,用于打开URL的命令?
  6. OSChina 周二乱弹 —— 这样成功要到小护士姐姐的微信
  7. Spring.profile实现开发、测试和生产环境的配置和切换
  8. 问道虚拟机服务器地址,问道1.60.0905虚拟机手工启动服务端+配套客户端+启动教程+充值注册软件+配套工具...
  9. 叮,你有一份光线追踪技术合集待查收 | IMG2020
  10. 【个人管理】Nicholas C. Zakas:我得到的最佳职业生涯建议
  11. CIE 国际照明委员会
  12. JAVA 开发基础【JSON相关】
  13. joomla 视频_Joomla的成年
  14. 蓝桥云课练习题 用杂志拼接信件
  15. java枚举值转化中文_多个枚举的国际化(枚举值的转换)
  16. 2018年应届毕业宇视科技嵌入式软件开发工程师面试笔试总结
  17. 优秀Android开发源码合集(附解析)程序员进阶宝典
  18. Docker 搭建FastDFS文件系统
  19. 开发人员troubleshooting的方式
  20. 收藏了,挺有意思的生成太极图

热门文章

  1. Notification添加点击意图的学习理解
  2. unity, destroy gameObject destroy all children
  3. 读书笔记-简单叙述对象关系
  4. Linux用户(user)和用户组(group)的日常管理与操作教程概述
  5. 我国初步建立法规,短期难扭转生物多样性减少趋势
  6. PHP系列(十三)PHP会话控制
  7. 云计算之openstack(N版)neutron网络服务最佳实践
  8. BaseServlet 继承 httpServlet
  9. CSharpGL(7)对VAO和VBO的封装
  10. CiTRIX XenServer 6.5安装体验