从Spring3.0开始,@Configuration用于定义配置类,用户替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

注意:@Configuration注解的配置类有如下要求:

  1. @Configuration不可以是final类型;
  2. @Configuration不可以是匿名类;
  3. 嵌套的configuration必须是静态类。

一、用@Configuration加载spring

使用@Configuration标注的类相当于SSM中配置的xml核心配置文件。

1.1、@Configuration配置spring并启动spring容器

1.2、@Configuration启动容器+@Bean注册Bean



1.3、@Configuration启动容器+@Component注册Bean



1.4、使用AnnotationConfigApplicationContext 注册 AppContext 类的两种方法

1.4.1配置类的注册方式是将其传递给 AnnotationConfigApplicationContext 构造函数

1.4.2AnnotationConfigApplicationContext 的register 方法传入配置类来注册配置类

1.5、配置Web应用程序(web.xml中配置AnnotationConfigApplicationContext)

过去,通常要利用 XmlWebApplicationContext 上下文来配置 Spring Web 应用程序,即在 Web 部署描述符文件 web.xml 中指定外部 XML 上下文文件的路径。XMLWebApplicationContext 是 Web 应用程序使用的默认上下文类。以下代码描述了 web.xml 中指向将由 ContextLoaderListener 监听器类载入的外部 XML 上下文文件的元素。

现在,您要将 web.xml 中的上述代码更改为使用 AnnotationConfigApplicationContext 类。切记,XmlWebApplicationContext 是 Spring 为 Web 应用程序使用的默认上下文实现,因此您永远不必在您的web.xml 文件中显式指定这个上下文类。现在,您将使用基于 Java 的配置,因此在配置 Web 应用程序时,需要在web.xml 文件中指定 AnnotationConfigApplicationContext 类。上述代码将修改如下:

以上修改后的 web.xml 现在定义了AnnotationConfigWebApplicationContext 上下文类,并将其作为上下文参数和 servlet 元素的一部分。上下文配置位置现在指向 AppContext 配置类。这非常简单。下一节将演示 bean 的生命周期回调和范围的实现。

1.6@Configuation总结

二、组合多个配置类(混合配置)

2.1、在@configuration中引入springml配置文件

使用@ImportResource加载xml文件到配置类中生效


2.2、在@configuration中引入其它注解配置

使用@Import注解将其他配置类引入到另一个配置类中生效


2.3、@configuration嵌套(嵌套的Configuration必须是静态类)



三、@EnableXXX注解

例如:@EnanleWebmvc注解
SSM中原来SpringMVC核心配置信息MvcConfig.xml文件添加配置信息,作为Mvc框架环境,原来是通过xml来进行配置(视图解析器,JSON转换器,文件上传解析器)但是这里是基于注解通过继承WebMvcConfigurerAdapter类并重写相关方法来进行配置(注意需要通过@EnableWebMvc注解来启动MVC环境

要实现spring mvc自定义配置,需要开启MVC配置:


总结:
当个遇到需要开启注解驱动的配置,在配置配置类的时候就需要添加@EnanleXXX注解

例如:
在配置AOP编程的时候配置xml文件需要声明自动代理生成器,创建代理 <aop:aspectj-autoproxy>,那么在使用配置类替代xml配置文件的时候,就需要在配置类上加上@EnableAspectJAutoProxy注解来声明自动代理生成器,创建代理。

四、@Profile指定不同的环境

我们在开发时,难免碰到不同环境的配置不同,比如,生产环境,测试环境,开发环境的数据库不一样。这样就需要我们指定不同环境中使用不同的URL。在Spring中,我们可以创建指定环境的Bean来解决这个问题。只有当规定的profile激活时,相应的bean才会被创建。另外没有指定profile的bean之中都会被创建,与激活哪个profile没有关系。


那么,如何激活一个Bean呢?我们可以指定spring.profile.active属性来指定哪个环境的bean被激活。如果不指定这个属性,它会去找spring.profiles.default的值。
如果均没有指定的话,就没有激活的profile,就不会创建指定profile的bean。

有多种方式设置这个属性:

  • 作为DispatcherServlet的初始化参数
  • 作为Web应用的上下文参数
  • 作为环境变量
  • 使用@ActiveProfiles注解设置

例如在SpringBoot的application.properties文件中配置

五、使用外部变量

例如:在springboot项目中
通过在核心配置文件中自定义配置两个属性,然后通过@value注解注入到相应的属性中。

在 SpringBootController 中定义属性,并使用@Value 注解或者自定义配置值,并对 其方法进行测试;

@Configurattion注解的作用及一些列组合使用相关推荐

  1. Spring常用注解,以及注解的作用和简单用法

    这篇文章主要介绍了Spring当中的常见的一些注解,以及注解的简单用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 @Configuration 作用:指定当 ...

  2. 一文总结Spring 注解及作用详解

    文章目录 开启注解扫描配置 @RequestMapping 声明bean的注解 注入bean的注解 spring配置文件中读取properties配置文件 j配置类相关注解 切面(AOP)相关注解 @ ...

  3. Numpy 数组复合排序——mX4列,根据多列组合排序

    Numpy 数组复合排序--mX4列,根据多列组合排序 一. Numpy 仅根据某列对 array(mX4)整体排序用argsort import numpy as npdata = np.array ...

  4. pandas将dataframe数据列中的年、月、日列组合成单一的日期数据列实战

    pandas将dataframe数据列中的年.月.日列组合成单一的日期数据列实战 目录 pandas将dataframe数据列中的年.月.日列组合成单一的日期数据列实战

  5. Spring Ioc注解式开发中注解的作用

    Spring Ioc注解式开发中注解的作用 目标:本章节注重于Spring Ioc的注解式开发之中注解的作用. 基于注解的DI实现IOC 1.定义bean而注解 a.@Component @Repos ...

  6. @getmapping注解的作用_一口气说出6种,@Transactional注解的失效场景

    作者:程序员内点事 引言 昨天公众号粉丝咨询了一个问题,说自己之前面试被问@Transactional注解哪些场景下会失效,一时语塞致使面试失败.所以今天简单的和大家分享一下@Transactiona ...

  7. android注解的作用,Android 用注解来提升代码质量

    Android 用注解来提升代码质量 Android,注解,annotation 2018.07.13 Android 提供了一个注解的 support 包,这个注解包配合 IDE 可以用来提升我的代 ...

  8. @data注解的作用_Java中注解学习系列教程-2

    在上一篇文章中,我们讲解了:Java中注解的定义.JDK中内置注解.第三方注解. 本文是注解系列教程中的第二篇.来看看今天主要内容: ​ 1:注解的分类 2:元注解说明 3:自定义注解声明 一:注解的 ...

  9. spring boot常用注解的作用

    Controller层注解 @Controller和@RestController的区别 @RestController注解相当于@ResponseBody + @Controller合在一起的作用 ...

最新文章

  1. openFileDialog 打开TXT记事本文件写入数据库
  2. 1.2.3 TCP/IP参考模型和五层参考模型
  3. anki 新的卡片类型_梁宝川:这一类型Anki卡片,你做了吗?
  4. 阿里nacos安装及使用指南
  5. java科学计数字符串显示
  6. java,将Image变量保存成图片
  7. 全屏背景:15个jQuery插件实现全屏背景图像或媒体
  8. oracle创建数据库用户并授权,oracle创建数据库、表空间、用户并授权
  9. python通讯录综合_Python通讯录作业
  10. 【Kattis - triangle 】Sierpiński Circumference(数学,求位数,取对数或Java)
  11. window 下注册 redis服务
  12. 漏洞C:/Windows/Fonts/csrss.exe文件找不到简单查找方法
  13. php goeasy,如何使用GoEasy实现PHP与Websocket实时通信
  14. QtreeView 树形结构
  15. HTML的表格边框的合并
  16. java地铁售票机系统_Java_地铁购票系统
  17. 电路原理图(SCH)相关知识详解
  18. 专科计算机网络技术综述,高职高专计算机系列教材:计算机网络技术
  19. ubuntu下的3D桌面.compiz
  20. 个推里群推php教程,GitHub - lyx2297999137/yii2-igetui: yii2个推

热门文章

  1. 如何查看静态库和动态库是32位还是64位
  2. ActiveX控件制作与发布,如何将您的C++程序嵌入到浏览器中
  3. 在SLES-11-SP1-i586上搭建apache+php环境
  4. PC-如何提高计算机的启动和关机的速度?
  5. .classpath 和.project文件含义
  6. 如何测量接收机到卫星的距离
  7. C++中调用DLL中的函数的两种方式
  8. pip Python 包安装和管理工具
  9. 2021年中国科技的脚步依旧不停 我们将走得更广更深更远
  10. 安徽省2019年普通高校招生文史、理工类最低控制分数线一览表