Spring Boot中的@ComponentScan
和@EnableAutoConfiguration
註釋之間有什麼區別?是否有必要添加這些?沒有這些註釋,我的應用程序運行良好。我只想了解爲什麼我們必須添加它們。Spring Boot中的@ComponentScan和@EnableAutoConfiguration有什麼區別?
回答
Spring Boot中的@ComponentScan和@@@EnableAutoConfiguration註解有什麼區別?
@EnableAutoConfiguration
註釋告訴Spring Boot基於你添加的jar依賴關係來「猜測」你想要如何配置Spring。例如,如果HSQLDB位於你的類路徑上,並且你沒有手動配置任何數據庫連接bean,那麼Spring將自動配置一個內存數據庫。
@ComponentScan
告訴Spring在指定的包中查找其他組件,配置和服務。 Spring能夠自動掃描,檢測並註冊來自預定義項目包的bean或組件。如果未指定包,則將當前類包視爲根包。
是否有必要添加這些?
如果您需要Spring引導來自動配置您的每件事情@EnableAutoConfiguration是必需的。您不需要手動添加它,Spring會根據您提供的註釋在內部爲您添加它。
實際上,@SpringBootApplication
註釋等效於使用@Configuration,@EnableAutoConfiguration
和@ComponentScan
及其默認屬性。
參見:
javadoc和** @ ComponentScan **和** @ ComponentScans **之間呢? –
一個春天啓動的主要優點是它的註釋驅動與傳統的基於XML的配置,@EnableAutoConfiguration自動配置Spring應用程序基於其包含的jar文件,它設置默認值或幫助程序bas編輯pom.xml中的依賴關係。 自動配置通常基於類路徑和定義的bean應用。因此,我們不需要定義任何DataSource,EntityManagerFactory,TransactionManager等,並且基於類路徑神奇地,Spring Boot自動創建適當的bean併爲我們註冊它們。例如,當你的類路徑上有一個tomcat-embedded.jar時,你可能需要一個TomcatEmbeddedServletContainerFactory(除非你已經定義了你自己的EmbeddedServletContainerFactory bean)。 @EnableAutoConfiguration具有一個exclude屬性來顯式地禁用自動配置,否則我們可以簡單地將它從pom.xml中排除,例如如果我們不希望Spring配置tomcat,那麼將spring-bootstarter-tomcat從spring-boot-starter-網頁。
@ComponentScan爲彈簧部件掃描提供範圍,它簡單地進入雖然所提供的基本包和拾取由@Bean或@Autowired等必需的,在一個典型的Spring應用的依賴關係,@ComponentScan是在使用配置類,用@Configuration註釋的類。配置類包含用@Bean註釋的方法。這些@Bean註釋的方法生成由Spring容器管理的bean。這些bean將由@ComponentScan註釋自動檢測。有一些註釋可以使bean自動檢測,如@Repository,@Service,@Controller,@Configuration,@Component。 在下面的代碼中,Spring從包中包含BeanA類開始掃描。
@Configuration
@ComponentScan(basePackageClasses = BeanA.class)
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class Config {
@Bean
public BeanA beanA(){
return new BeanA();
}
@Bean
public BeanB beanB{
return new BeanB();
}
}
- 1. spring-boot:run和spring-boot有什麼區別:開始
- 2. Spring Boot - Spring security @ComponentScan或@Import
- 3. 誤差@EnableAutoConfiguration和@@ ComponentScan使用Spring引導+彈簧數據
- 4. Spring框架和Spring Boot的區別?
- 5. Spring @ComponentScan未被拾取,可能是由於@SpringBootApplication中的@EnableAutoConfiguration?
- 6. spring-boot-starter-web和spring-boot-starter-web-services和spring-boot-starter-jersey之間的區別
- 7. Spring Boot:如何重新使用@EnableAutoConfiguration?
- 8. Spring CGLIB和CGLIB有什麼區別?
- 9. DAO和Spring Beans有什麼區別?
- 10. Spring BeanFactoryAware和ApplicationContextAware有什麼區別?
- 11. Spring-WS WebServiceTemplate:HttpUrlConnectionMessageSender和HttpComponentsMessageSender有什麼區別?
- 12. Spring和Spring.net有什麼區別嗎?
- 13. 有什麼區別`和$(Bash中有什麼區別?
- 14. 關於Spring引導和@EnableAutoConfiguration
- 15. Spring Boot - 爲什麼@ComponentScan不能使用我的軟件包組合?
- 16. Spring MVC中的Controller和Handler有什麼區別?
- 17. Spring中的@Repository和@RepositoryDefinition有什麼區別?
- 18. Spring中的ResponseEntity和HttpEntity有什麼區別?
- 19. Spring XML中的「classpath:」和「classpath:/」有什麼區別?
- 20. Eclipse中的「mvn spring-boot:run」和「Add to Tomcat server」有什麼區別?
- 21. Spring的TestExecutionListener接口中prepareTestInstance和beforeTestMethod有什麼區別?
- 22. spring-context和spring-core依賴關係有什麼區別?
- 23. spring 2.5和spring 3.x有什麼區別?
- 24. spring-data-jpa和spring-boot-starter-data-jpa之間的區別
- 25. Spring Data-JPA與JPA:有什麼區別?
- 26. Spring Boot與日期的區別
- 27. 有什麼區別? :和||
- 28. &&和||有什麼區別?
- 29. 「/」和「/ *」有什麼區別?
- 30. 有什麼區別:。!和:r!?
你有['@ SpringBootApplication'(http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/SpringBootApplication.html)?這是您提到的兩個替代品 –
是的,我在我的主類中使用它們 –
'@ ComponentScan'用於掃描註釋的Spring組件,'@ EnableAutoConfiguration'用於啓用免費的好東西(配置,激活的組件等) Spring Boot提供。 '@ SprintBootApplication'允許您使用單個註釋而不是通常使用的一些註釋,就像您提到的兩個註釋一樣。看看我鏈接到 –