Spring容器新增元件方式實現
阿新 • • 發佈:2020-01-07
本部落格介紹SpringBoot專案中將元件新增到Spring容器中的方法,SpringBoot專案有一個很明顯的優點,就是不需要再編寫xml配置檔案,只需要用SpringBoot的註解就可以實現類似功能,不過其實SpringBoot專案還是支援引入xml配置檔案的,所以本部落格介紹一下兩種使用方式
ok,介紹一下SpringBoot專案的@ImportResource註解,這個註解的作用就是引入一些xml資源,載入到Spring容器裡
建個TestBean類
public class TestService { }
新建一個beans.xml,寫一個service的bean配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="testService" class="com.example.springboot.properties.service.TestService"></bean> </beans>
然後可以Application類裡直接引用,也可以載入Configuration配置類上面
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ImportResource; @SpringBootApplication @ImportResource(locations = {"classpath:beans.xml"}) public class SpringbootPropertiesConfigApplication { public static void main(String[] args) { SpringApplication.run(SpringbootPropertiesConfigApplication.class,args); } }
Junit測試類:
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContext; @SpringBootTest class SpringbootPropertiesConfigApplicationTests { //裝載ioc容器 @Autowired ApplicationContext ioc; @Test void contextLoads() { //測試這個bean是否已經載入到Spring容器 boolean flag = ioc.containsBean("testService"); System.out.println(flag); } }
經過測試,返回的是true,ok,換Springboot註解的方式實現
新建一個PropertiesConfig配置類,注意:元件的id就是方法名
import com.example.springboot.properties.service.TestService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration //@Configuration註解實踐上也是一個Component public class PerpertiesConfig { //通過@Bean註解將元件新增到Spring容器,元件的id就是方法名 @Bean public TestService testService1(){ return new TestService(); } }
Junit測試繼續:
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContext; @SpringBootTest class SpringbootPropertiesConfigApplicationTests { @Autowired ApplicationContext ioc; @Test void contextLoads() { //傳方法名testService1 boolean flag = ioc.containsBean("testService1"); System.out.println(flag); } }
Junit測試,返回的還是TRUE,如果改下name為testService就是返回FALSE的,因為元件名稱就是@Bean註解對應的方法名
其實以前寫Spring專案的時候,很顯然也可以用@Service或者@Controller註解將元件新增到容器裡,如果你去點一下原始碼,其實這些註解都有一個共同點就是都引入了@Component註解,而本部落格介紹的@Configuration註解,本質上也是引入了@Component註解,而@Bean是沒有引入的,所以,如果你只加@Bean,而不加@Configuration註解的情況,是不可以將元件新增到Spring容器的
example source:github例子程式碼下載
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。