1. 程式人生 > 程式設計 >Spring容器新增元件方式實現

Spring容器新增元件方式實現

本部落格介紹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例子程式碼下載

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。