1. 程式人生 > 其它 >spring-boot-note1---java配置

spring-boot-note1---java配置

技術標籤:spring-boot

一、spring的java配置方式

spring-boot 提倡java配置的方式,很多自動配置類也是基於java配置的,比如mybaits,datasource等等。

首先列舉一下spring的java配置中一些基本註解:

@Configuration 表示一個配置類,即一個xml檔案的配置。

@ComponentScan 表示自動掃描包路徑,(路徑為本類的包路徑),等價於xml中的 <context:component-scan base-package="" />。'

@Bean 註解用在方法上,表示方法返回值會注入到spring中,如果沒名稱那麼預設就是方法名,@Bean(name="name")。

@Primary 註解表示是主要的,如果出現一個同一型別2個此類的bean時,那麼優先注入有此註解的bean。

二、demo測試

包結構截圖

1、建立一個名稱oneClass的pojo類,此類有id和name屬性。

public class OneClass {
	private String id;
	private String name;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "OneClass [id=" + id + ", name=" + name + "]";
	}
	
}

2、建立一個名稱OneWrapClass的pojo類,此類有oneClass型別的成員變數,並且通過建構函式進行注入。

public class OneWrapClass {

	private OneClass oneClass;

	public OneWrapClass(OneClass oneClass) {
		this.oneClass = oneClass;
	}

	public OneClass getOneClass() {
		return oneClass;
	}

	public void setOneClass(OneClass oneClass) {
		this.oneClass = oneClass;
	}

	@Override
	public String toString() {
		return "TwoClass [oneClass=" + oneClass + "]";
	}
	
}

3、建立另外一個類ohterDao,它通過註解@Component註解注入。

@Component
public class OtherDao {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "OtherDao [name=" + name + "]";
	}
}

4、配置類MyJavaConfigOne

@Configuration // 表示這是一個配合類
@ComponentScan // 預設掃描路徑此類的包路徑
public class MyJavaConfigOne {

	/**
	 *  預設名稱方法名:oneClass,並且這裡指定了Primary。(即如果2個此型別bean,優先此bean)
	 */
	@Bean
	@Primary 
	// @Bean(name="oneClass")
	public OneClass oneClass() {
		OneClass oneClass = new OneClass();
		oneClass.setId("1");
		oneClass.setName("name1");
		return oneClass;
	}
	
	/**
	 * 第二個oneClass的bean 
	 */
	@Bean(name="oneClassTwo")
	public OneClass oneClassTwo() {
		OneClass oneClass = new OneClass();
		oneClass.setId("2");
		oneClass.setName("name2");
		return oneClass;
	}
	
	/**
	 * 方法的引數會注入已經存在的bean,這裡會注入 oneClass 。
	 */
	@Bean
	public OneWrapClass twoClass(OneClass oneClass) {
		return new OneWrapClass(oneClass);
	}
	
}

三、測試

通過bean的方式我們建立了2個oneClass的bean,並且把oneClass名稱的注入到了OneWrapClass,

另外通過包掃描的方式還可以注入OtherDao。

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = MyJavaConfigOne.class)
public class MyJavaTest {
	
	@Autowired
	private OneClass oneClass;
	
	@Autowired
	@Qualifier("oneClassTwo")
	private OneClass oneClassTwo;
	
	@Autowired
	private OneWrapClass OneWrapClass;
	
	@Autowired
	private OtherDao otherDao;
	
	@Test
	public void test1() {
		System.out.println(otherDao.toString()); // OtherDao [name=null]
		System.out.println(oneClassTwo);  // [id=2, name=name2]
		System.out.println(OneWrapClass.toString()); // TwoClass [oneClass=OneClass [id=1, name=name]]
	}
	
}