好程序員Java學習路線分享Spring創建Bean的3種方式,本文講解了在Spring 應用中創建Bean的多種方式,包括自動創建,以及手動創建注入方式,實際開發中可以根據業務場景選擇合適的方案。
方式1:
使用Spring XML方式配置,該方式用於在純Spring 應用中,適用於簡單的小應用,當應用變得複雜,將會導致XMl配置文件膨脹 ,不利於對象管理。
<bean id="xxxx" class="xxxx.xxxx"/>
方式2:
使用@Component,@Service,@Controler,@Repository註解
這幾個註解都是同樣的功能,被註解的類將會被Spring 容器創建單例對象。
@Component : 側重於通用的Bean類
@Service:標識該類用於業務邏輯
@Controler:標識該類爲Spring MVC的控制器類
@Repository: 標識該類是一個實體類,只有屬性和Setter,Getter
1 2 3 | @Component public class User{ } |
當用於Spring Boot應用時,被註解的類必須在啓動類的根路徑或者子路徑下,否則不會生效。
如果不在,可以使用@ComponentScan標註掃描的路徑。
spring xml 也有相關的標籤<component-scan />
1 2 3 4 5 6 | @ComponentScan(value={"com.microblog.blog","com.microblog.common"}) public class MicroblogBlogApplication { public static void main(String args[]){ SpringApplication.run(MicroblogBlogApplication.class,args); } } |
方式3:
使用@Bean註解,這種方式用在Spring Boot 應用中。
@Configuration 標識這是一個Spring Boot 配置類,其將會掃描該類中是否存在@Bean 註解的方法,比如如下代碼,將會創建User對象並放入容器中。
@ConditionalOnBean 用於判斷存在某個Bean時纔會創建User Bean.
這裏創建的Bean名稱默認爲方法的名稱user。也可以@Bean("xxxx")定義。
1 2 3 4 5 6 7 8 | @Configuration public class UserConfiguration{ @Bean @ConditionalOnBean(Location.class) public User user(){ return new User(); } } |
Spring boot 還爲我們提供了更多類似的註解。
也和方式2一樣,也會存在掃描路徑的問題,除了以上的解決方式,還有使用Spring boot starter 的解決方式
在resources下創建如下文件。META-INF/spring.factories.
Spring Boot 在啓動的時候將會掃描該文件,從何獲取到配置類UserConfiguration。
spring.factories.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.log.config.UserConfiguration
如果不成功,請引入該依賴
1 2 3 4 5 | <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> |
這個方式也是創建SpringBoot-starter的方式。