Spring Boot的@Configuration和自動配置有什麼區別?
我們都知道springboot的這個原理@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
那麼這三個註釋代表什麼意思?@Configuration 和 @EnableAutoConfiguration都有配置,有什麼區別?
@EnableAutoConfiguration:啟用Spring Boot的自動配置機制,類似在java程式碼中自動import,屬於自動匯入。
這是告訴Spring Boot根據你新增的jar依賴關係“猜測”你想要如何配置Spring。如果你在pom.xml中配置了依賴spring-boot-starter-web,那麼其jar包會加入到類路徑classpath,spring會自動配置Tomcat和Spring MVC。
自動配置spring mvc是什麼意思?如果不是自動配置,我們需要手工配置如下:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/todo-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
當我們使用Hibernate / JPA時,我們還需要配置資料來源,實體管理器工廠,事務管理器等。
使用自動配置以後,就不需要手工配置了。
@Configuration:有自動匯入就有屬於自動匯出,需要配合該類中方法的@bean,這就相當於一個xml配置:
<beans>
<bean id="b" class="springsimple.B"/>
<bean id="a" class="springsimple.A"/>
</beans>
@bean等於一行bean配置,整個
Xml配置檔案等於@Configuration註釋的類,spring已經從xml配置為主模式轉變到類註釋為主的程式碼模式,估計以後走向函式式方式。
上面這份配置中的A和B型別如果被其他地方需要,比如在其他某處有:
public class C{
@Autowire
private A a;
}
那麼在C類就可以使用你提供的A型別了,所以說是匯出作用,提供bean源。
@ComponentScan:掃描所有使用@Component 的類,不管自動匯入還是匯出,首先需要告訴spring boot到哪裡去找匯入匯出的原料。
@SpringBootApplication註解相當於使用@Configuration,@EnableAutoConfiguration以及@ComponentScan 與他們的預設屬性。