SpringBoot自動裝配之@Enable深入講解
SpringBoot中提供了很多Enable開頭的注解,這些注解都是用于動態(tài)啟用某些功能的。而其底層原理是使用@Import注 解導(dǎo)入一些配置類,實現(xiàn)Bean的動態(tài)加載。
提問:SpringBoot 工程是否可以直接獲取jar包中定義的Bean?
答:不可以
案例:
兩個子模塊
①子模塊要得到
②子模塊的User類的bean(這里用編號表示)
方法一:使用@ComponentScan掃描com.itheima.springbooyembal包
package com.enable.entity; public class User { }
package com.enable.config; import com.enable.entity.User; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class UserConfig { @Bean public User user(){ return new User(); } }
引入依賴:
<dependency> <groupId>com.enable</groupId> <artifactId>springboot-enable-other</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
使用ComponentScan:
package com.example.demo; import com.enable.config.EnableUser; import com.enable.config.UserConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; @SpringBootApplication @ComponentScan("com.enable.config") public class SpringbootApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(SpringbootApplication.class, args); Object user = context.getBean("user"); System.out.println(user); } }
測試如下:
方法二:可以使用@Import注解,加載類,這些類都會被Spring創(chuàng)建,并放入IOC容器。
package com.enable.entity; public class User { }
package com.enable.config; import com.enable.entity.User; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class UserConfig { @Bean public User user(){ return new User(); } }
引入依賴
<dependency> <groupId>com.enable</groupId> <artifactId>springboot-enable-other</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
使用Import注解
package com.example.demo; import com.enable.config.EnableUser; import com.enable.config.UserConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; @SpringBootApplication @Import(UserConfig.class) public class SpringbootApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(SpringbootApplication.class, args); Object user = context.getBean("user"); System.out.println(user); } }
測試如下:
方法三:對@Import注解進(jìn)行封裝
自定義@EnableUser注解
package com.enable.config; import org.springframework.context.annotation.Import; import java.lang.annotation.*; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(UserConfig.class) public @interface EnableUser { }
自定義配置類
package com.enable.config; import com.enable.entity.User; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class UserConfig { @Bean public User user(){ return new User(); } }
新建實體類:
package com.enable.entity; public class User { }
引入依賴
<dependency> <groupId>com.enable</groupId> <artifactId>springboot-enable-other</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
使用自定義的注解
package com.example.demo; import com.enable.config.EnableUser; import com.enable.config.UserConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; @SpringBootApplication @EnableUser public class SpringbootApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(SpringbootApplication.class, args); Object user = context.getBean("user"); System.out.println(user); } }
測試如下:
到此這篇關(guān)于SpringBoot自動裝配之@Enable深入講解的文章就介紹到這了,更多相關(guān)SpringBoot @Enable內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Spring Cloud 本地屬性覆蓋的問題
這篇文章主要介紹了關(guān)于Spring Cloud 本地屬性覆蓋的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03java實現(xiàn)騰訊ocr圖片識別接口調(diào)用
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)騰訊ocr圖片識別接口調(diào)用,拍車牌識別車牌號功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11Java如何使用遞歸查詢多級樹形結(jié)構(gòu)數(shù)據(jù)(多級菜單)
這篇文章主要介紹了Java如何使用遞歸查詢多級樹形結(jié)構(gòu)數(shù)據(jù)(多級菜單),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07解決java.util.NoSuchElementException異常的問題
這篇文章主要介紹了解決java.util.NoSuchElementException異常的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09java中實現(xiàn)兼容ie6 7 8 9的spring4+websocket
這篇文章主要介紹了java中實現(xiàn)兼容ie6 7 8 9的spring4+websocket程序代碼,十分的簡單實用,有需要的小伙伴可以參考下。2015-06-06