2.2 Spring boot 配置分析
阿新 • • 發佈:2019-01-03
本章主要寫的是 Spring5 通過實現FactoryBean 的方式 來注入Bean 。
初始條件:
1. Java version : 1.8
2. maven vesion: 1.3.9
第一步:建立一個簡單結構(quickstart)的 Maven 工程
第二步:將 Spring5 的依賴加入專案的 POM 檔案中:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId >
<version>5.0.0.RELEASE</version>
</dependency>
第三步: 建立一個 bean , 用於注入到 Spring 中。
public class MyBean {
/* 初始化的目的是為了在獲取 bean 時,可以有直觀的資訊輸出 */
private String id = "ID_000000000001";
public String getId() {
return id;
}
public void setId(String id) {
this .id = id;
}
}
第四步: 建立類,繼承FactoryBean,將泛型T替換掉,並實現其方法。
import com.test.test1.MyBean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.lang.Nullable;
public class MyBeanFactory implements FactoryBean<MyBean> {
@Nullable
public MyBean getObject() throws Exception {
return new MyBean();
}
@Nullable
public Class<?> getObjectType() {
return MyBean.class;
}
// 建立bean的方式,單例、多例,預設是多例
public boolean isSingleton() {
return false;
}
}
第五步: 建立一個配置類,用於管理要注入的 bean 或者配置檔案資訊。需要在類上新增 @Configuration 註解,以便讓 Spring 識別為這是一個配置類。
@Configuration
public class MyConfig {
}
在此基礎上,把上一步建立的自定義工廠 bean 注入到改配置類中,新增 getBean 方法:
import com.test.test2.MyBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfig {
@Bean
public MyBeanFactory createRunableFactory(){
return new MyBeanFactory();
}
}
上面的註釋部分是可以替代 @bean 的,區別是 @Bean(“xXX”) 方式可以自定義 bean 的名字,“xXX”可以在後續獲取該 bean 的時候使用。
第六步:建立一個含有 main 方法的主類,在該類中獲取 Spring 的上下文,並將上述的配置類新增到獲取 Spring 的上下文的構造器中,文章的目的是實現以註解的方式實現 bean 的注入,故選擇 AnnotationConfigApplicationContext 。
import com.test.test2.MyBeanFactory;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* 測試bean基於註解的注入方式
*/
public class App
{
public static void main( String[] args ) {
// 以註解的形式把 bean 注入Spring 並獲取 Spring 的上下文環境
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyConfig.class);
// 獲取自己配置的 bean 例項
MyBeanFactory runableFactory = ctx.getBean(MyBeanFactory.class);
try {
String id = runableFactory.getObject().getId();
System.out.println("MyBean ID ----- >> " + id);
} catch (Exception e) {
e.printStackTrace();
}
}
}
直接執行上面的類,輸出的 bean 資訊如下:
MyBean ID ----- >> ID_000000000001