从Spring3.0开始,@Configuration用于定义配置类,用户替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
注意:@Configuration注解的配置类有如下要求:
- @Configuration不可以是final类型;
- @Configuration不可以是匿名类;
- 嵌套的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 注解或者自定义配置值,并对 其方法进行测试;


本文详细介绍了@Configuration注解在Spring中的作用,包括如何启动和注册Spring容器、配置类的使用方式,以及与@Component、@Bean、@ImportResource、@Import和@Profile的结合使用。此外,还讨论了如何在不同环境和外部变量中使用@Configuration。
1万+

被折叠的 条评论
为什么被折叠?



