spring-boot-note1---java配置
阿新 • • 發佈:2021-01-03
技術標籤: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]]
}
}