一、背景
在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的區別。
具體使用: