4-@Configuration注解深入详解


我准备战斗到最后,不是因为我勇敢,是我想见证一切。 --双雪涛《猎人》

[TOC]

Thinking

  1. 一个技术,为什么要用它,解决了那些问题?
  2. 如果不用会怎么样,有没有其它的解决方法?
  3. 对比其它的解决方案,为什么最终选择了这种,都有何利弊?
  4. 你觉得项目中还有那些地方可以用到,如果用了会带来那些问题?
  5. 这些问题你又如何去解决的呢?

声明:本文基于springboot 2.1.3 2.1.3.RELEASE

该注解是用于进行配置的,就是标识某一个类是一个配置类的注解。该注解是spring提供的。位于spring.context包下。

1、基于doc文档的解读

image-20200605230430059

该注解用于类上,并且搭配@Bean注解使该注解标识的方法变成由spring容器管理的Bean对象。每个方法上都会加上这样的一个Bean的注解,方法本身会返回一个对象。

根据class类进行属性的注册。

image-20200605234410082

另一种注册Bean的方式,为xml的方式。

image-20200606225234968

​ 其中 是用于激活那些已经在spring容器里注册过的bean(无论是通过xml的方式还是通过package sanning的方式)上面的注解。

值得注意的是不但启用了对类包进行扫描以实施注释驱动 Bean 定义的功能,同时还启用了注释驱动自动注入的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor),因此当使用 后,就可以将 移除了。

根据注解进行扫描

image-20200606232214849

springboot 所以一般启动类都是在最外层的中,以保证默认情况下可以扫描到该类下的所有Bean,在SpringBoot的所有的组件中都会定义在主类的子包下。

加载外部的属性

image-20200608230650032

在上面的doc中看出,在家在外部配置时,可以使用@PropertySource加载自定义的配置。可以指定一个或者多个。

使用@value注解 注入 配置文件中的信息

image-20200608231439273

使用@Import组合多个配置类

image-20200608231800406

这里的注入是可以使用@Import 组合多个配置类

使用@Profile给配置类进行区分

image-20200608232245718

用于区分在同一个Bean 对象名中,具体的注入对象。

相当于在开发环境或者在测试环境中需要使用不同的数据库,所以这种只需要使用该注解就可以实现 一件转换了。

配合@ImportResource导入xml文件中的配置

image-20200608232609579

使用嵌套的@Configuration

image-20200608232724863

这样在使用AppConfig 时,就已经隐式的将DatabaseConfig注入到该Bean中了,避免了显示的使用@Import注解了。

使用懒加载 的配置类

image-20200608233141913

默认情况下,Bean 是随容器启动时,一并创建好的,但是存在懒加载的需求是,可以使用@Lazy将配置类设置为懒加载。

该注解也适用于所有的Bean类

image-20200608233403421

测试类也是支持配置上下文的

image-20200608233457907

其他

image-20200608233731715

可以配置开启spring内置的各种功能。

2、成员变量

别名

image-20200608235515901

默认情况下,如果在缺醒状态下,是使用bean的类名作为名称。

image-20200608235914052

使用该注解的类,默认情况下是会使用cglib将所有的bean 动态生成。

如果设置成false,则配置类就是一个普通的工厂类。


本文仅供笔者本人学习,有错误的地方还望指出,一起进步!望海涵!

转载请注明出处!

欢迎关注我的公共号,无广告,不打扰。不定时更新Java后端知识,我们一起超神。


qrcode.jpg

——努力努力再努力xLg

加油!

你可能感兴趣的:(4-@Configuration注解深入详解)