SpringBoot注解综合

@Bean
  • 注解通常会应用在一些配置类(由@Configuration注解描述)中,用于描述具备返回值的方法,然后系统底层会通过反射调用其方法,获取对象基于作用域将对象进行存储或应用。

  • @Bean 应用场景:第三方资源的整合及配置。

  • Spring容器中由@Bean描述的方法的返回值,对应的名字默认为方法名

@SpringBootApplication
  • 是Sprnig Boot项目的核心注解,目的是开启自动配置

@SpringBootConfiguration
  • 是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。

  • 一般我们无需自己添加。

@Component
  • 是Spring中用于描述Bean类的一个注解。

  • 用于告诉Spring这个类的实例由Spring创建,当此对象由Spring创建和管理时,默认会将对象存储到池(Bean池)中。

  • 对象名字默认为类名,首字母小写.

@SpringBootTest
  • 注解用于告诉spring框架,此测试类交给spring管理。

@Autowired
  • 注解描述属性时,用于告诉spring框架要为此属性注入一个值.

  • 由spring框架定义,用于描述类中属性或相关方法。Spring框架在项目运行时假如发现由他管理的Bean对象中有使用@Autowired注解描述的属性或方法,可以按照指定规则为属性赋值(DI)。

  • 应用基本规则:

    • 首先,要检测容器中是否有与属性或方法参数类型相匹配的对象,假如有并且只有一个则直接注入。

    • 其次,假如检测到有多个类型都满足注入要求,还会按照@Autowired描述的属性或方法参数名查找是否有名字匹配的对象,,检测哪个bean名字与属性名相同,有则直接注入,没有则抛出异常。

    • 最后,假如我们有明确要求,必须要注入类型为指定类型,名字为指定名字的对象还可以使用

@Qualifier
  • @Qualifier注解对其属性或参数进行描述(此注解必须配合@Autowired注解使用)。

  • 用于指定将哪个bean的名字对应的对象注入给描述的属性

@Scope ("singleton/prototype")作用域
  • 是Spring中用于定义Bean对象作用域的一个注解

    常用的值有:

    • singleton(单例作用域): 整个内存有一份Bean实例,此实例何时创建与类的延迟加载特性配置有关,此实例创建以后,生命周期会由spring框架管理.

    • prototype(多例做哟用于): 每次获取都会创建新实例,此实例会在需要时创建与lazy特性无关,这个实例创建以后,不会交给spring管理,spring可以对其初始化,但不负责销毁.

  • spring容器中的bean没有使用@Scope注解描述时默认就是单例

@Lazy延迟加载
  • 注解用于描述类,其目的是告诉spring框架此类支持延迟加载,通常会配合单例作用域使用.

  • @Lazy注解: 描述Spring管理的bean对象时,可以让bean延迟构建和初始化.

    • 延迟加载(懒加载,按需加载)应用场景?

    • 大对象(例如一些池对象),稀少用(例如容器初始化创建对象也用不到)

  • @Lazy(true) ----- true赋值给了value

    • 默认value属性值为true,表示此对象要延迟构建及初始化

  • @Lazy(false) ----- false赋值给了value

    • 假如要写false,和没有写@Lazy注解是一样的,表示不支持对象延迟构建及初始化

@PostConstruct生命周期方法 —— 初始化
  • 注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法之后执行.

  • 在这样的方法中一般会为创建好的对象再此进行一些初始化.

@PerDestroy生命周期方法 —— 销毁
  • 注解用于描述bean对象生命周期方法中的销毁方法,此方法会在在对象销毁之前执行(当作用域为prototype时,此方法不会执行)

  • 在这样的方法中可以实现一些,资源销毁操作.

扩展:

  • SpringBoot 2.xx 工程下的测试类有什么特点? 1)包结构(启动类所在包或子包) 2)注解描述(@SpringBootTest)

  • SpringBoot 2.x 工程下的单元测试方法有什么特点? 1)单元测试方法使用@Test注解(org.junit.jupiter.api.Test)进行描述. 2)单元测试方法不能使用private访问修饰符 3)单元测试方法返回值只能是void类型 4)单元测试方法不允许写方法参数 5)单元测试方法允许抛出异常.

  • SpringBoot单元测试类中如何为属性进行值的注入? 1)单元测试类使用了@SpringBootTest注解描述 2)测试类中的属性使用Spring框架中的指定注解进行描述(例如@Autowired)

  • 假设此对象为一个对象池

    • 1)此对象要交给spring管理(SpringBoot工程下)

      • 1.1)类的位置(必须放在启动类所在包以及子包)

      • 1.2)类的描述(使用@Component注解)

    • 2)需要此对象的地方可从spring的bean池中获取

    • 思考:

  • 1)如何判定一个对象在何时创建?

    • (日志,断点)

  • 2)Spring容器中的Bean对象默认在启动时创建,但长时间又不使用这个对象,你觉得先把对象创建出来好吗?

    • (不好,占内存资源,由其是一些大对象)

  • 3)Spring容器中的Bean对象假如不希望在容器启动时进行创建,该如何设计呢?

    • (延迟加载)

SpringBoot注解综合的更多相关文章

  1. springboot注解使用说明

    springboot注解 @RestController和@RequestMapping注解 我们的Example类上使用的第一个注解是 @RestController .这被称为一个构造型(ster ...

  2. springBoot系列-->springBoot注解大全

    一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...

  3. SpringBoot注解大全(转)

    原文链接:[springBoot系列]--springBoot注解大全 一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Co ...

  4. springboot注解大全

    springboot注解:@Service: 注解在类上,表示这是一个业务层bean@Controller:注解在类上,表示这是一个控制层bean@Repository: 注解在类上,表示这是一个数据 ...

  5. SpringBoot注解验证参数

    SpringBoot注解验证参数 废话不多说,直接上表格说明: 注解 作用类型 解释 @NotNull 任何类型 属性不能为null @NotEmpty 集合 集合不能为null,且size大于0 @ ...

  6. SpringBoot注解把配置文件自动映射到属性和实体类实战

    SpringBoot注解把配置文件自动映射到属性和实体类实战 简介:讲解使用@value注解配置文件自动映射到属性和实体类 1.配置文件加载 方式一 1.Controller上面配置 @Propert ...

  7. 转-spring-boot 注解配置mybatis+druid(新手上路)-http://blog.csdn.net/sinat_36203615/article/details/53759935

    spring-boot 注解配置mybatis+druid(新手上路) 转载 2016年12月20日 10:17:17 标签: sprinb-boot / mybatis / druid 10475 ...

  8. 【转载】springboot注解

    https://blog.csdn.net/yitian_66/article/details/80866571 springboot注解:@Service: 注解在类上,表示这是一个业务层bean@ ...

  9. SPRINGBOOT注解最全详解(

    #     SPRINGBOOT注解最全详解(整合超详细版本)          使用注解的优势:               1.采用纯java代码,不在需要配置繁杂的xml文件           ...

随机推荐

  1. File and Code Templates IN IDEA

    File and Code Templates (文件代码模板) 如何自定义设置头文件的注释,其中包括一些作者和文件创建时间和版本的设置 先打开File->Settings(或Alt+Ctrl+ ...

  2. 调试HotSpot源代码

    之前的文章在Ubuntu 16.04上编译OpenJDK8的源代码 已经介绍过在Ubuntu上编译OpenJDK8的源代码,这一篇将介绍在Ubuntu上调试OpenJDK8源代码的2种方式. 1.GD ...

  3. (五)ELK Logstash output

    # 输出插件将数据发送到一个特定的目的地, 除了elasticsearch还有好多可输出的地方, 例如file, csv, mongodb, redis, syslog等 output { if [t ...

  4. 线性动归之Wooden Sticks

    题面:现在有n(n<5000)个木头,每个木头都有长度l和重量w(l<10000,w<10000),现在你要对木头进行加工: 1.第一根木头需要先花费1min: 2.加工完第i跟木头 ...

  5. VS2019阅读源码 翻译注释插件

    VS翻译插件: Comment Translator China https://marketplace.visualstudio.com/items?itemName=netcorevip.Comm ...

  6. mysql Unknown error 1146

    错误提示:Couldn't acquire next trigger: Unknown error 1146 spring +quartz 实现任务调度,由于quartz 默认读取表名为大写,新建数据 ...

  7. 爬虫前篇 /https协议原理剖析

    爬虫前篇 /https协议原理剖析 目录 爬虫前篇 /https协议原理剖析 1. http协议是不安全的 2. 使用对称秘钥进行数据加密 3. 动态对称秘钥和非对称秘钥 4. CA证书的应用 5. ...

  8. redis(三):Redis 命令(python)

    import redis from redis import StrictRedis redis=StrictRedis(host='localhost',port=6379,db=0,passwor ...

  9. python 面向对象专题(七):异常处理

    目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 2.try 6. 常见异常种类 1. ...

  10. Kubernetes部署通用手册 (支持版本1.19,1.18,1.17,1.16)

    Kubernetes平台环境规划 操作环境 rbac 划分(HA高可用双master部署实例) 本文穿插了ha 高可用部署的实例,当前章节设计的是ha部署双master 部署 内网ip 角色 安装软件 ...