springboot中@Configuration的用法
一、背景
在spring框架中,会有大量 的xml配置文件,或者需要做很多繁琐的配置。
从spring3开始,spring就支持了两种bean的配置方式, 一种是基于xml文件方式、另一种就是JavaConfig 。
springboot 框架是为了能够帮助使用 spring 框架的开发者快速高效的构建一个基于 spirng 框架以及 spring 生态 体系的应用解决方案。它是对约定优于配置这个理念下 的一个最佳实践。因此它是一个服务于框架的框架,服务的范围是简化配置文件。
约定优于配置的体现
maven的目录结构
默认有resources文件夹存放配置文件
默认打包方式为jar
spring-boot-starter-web 中默认包含 spring mvc 相关依赖以及内置的tomcat容器,使得构建一个web应用 更加简单
默认提供application.properties/yml文件
默认通过 spring.profiles.active 属性来决定运行环境时读取的配置文件
EnableAutoConfiguration 默认对于依赖的starter进行自动装载
Spring4 以后,官方推荐我们使用Java Config来代替applicationContext.xml,声明将Bean交给容器管理。
在Spring Boot中,Java Config的使用也已完全替代了applicationContext.xml。实现了xml的零配置。在实现JavaConfig配置的时候就需要使用@Configuration和@Bean注解。
二、注解@Configure的作用
@Configuration的作用:标注在类上,配置spring容器(应用上下文)。相当于把该类作为spring的xml配置文件中的<beans>。@Configuration注解的类中,使用@Bean注解标注的方法,返回的类型都会直接注册为bean。
@Configure注解的定义如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
String value() default "";
}
从定义来看,底层是含有@Component ,所以@Configuration 具有和 @Component 的作用。因此context:component-scan/或者@ComponentScan都能处理@Configuration注解的类。
从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
注意:@Configuration注解的配置类有如下要求:
三、JavaConfig和xml的异同
传统意义上的 spring 应用都是基于 xml 形式来配置 bean 的依赖关系。然后通过spring容器在启动的时候,把bean进行初始化并且,如果bean之间存在依赖关系,则分析这些已经在IoC容器中的bean根据依赖关系进行组装。 Java5 引入了 Annotations 这个特性,Spring 框架也紧随大流并且推出了基于 Java 代码和Annotation元信息的依赖关系绑定描述的方式,也就是JavaConfig。
任何一个标注了@Configuration 的 Java 类定义都是一个 JavaConfig 配置类。而在这个配置类中,任何标注了 @Bean 的方法,它的返回值都会作为 Bean 定义注册到 Spring的IOC容器,方法名默认成为这个bean的id。和之前XML配置的作用是一样的。
具体的相同之处:
1、@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的,作用为:配置spring容器(应用上下文)
2、@Bean标注在方法上(返回某个实例的方法),等价于spring的xml配置文件中的,作用为:注册bean对象
1、表达形式层面
@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的,作用为:配置spring容器(应用上下文)
基于XML配置的方式是这样:
如果一个bean的定义依赖其他bean,则直接调用对应的JavaConfig类中依赖bean的创建方法就可以了。
四、两种方法配置Mybatis
博文中,展示了分别用JavaConfig和xml配置mybatis的代码。可以很容易看出JavaConfig和xml的区别。
具体使用: