創(chuàng)建一個(gè)config包糠排,在包中創(chuàng)建一個(gè)SpringConfiguration類,該類是一個(gè)配置類荒揣,他的作用和bean.xml是一樣的
spring中的新注解
Configuration
作用:指定當(dāng)前類是一個(gè)配置類
ComponentScan
作用:用于通過注解指定spring在創(chuàng)建容器時(shí)要掃描的包
屬性:value良哲,它和basePackages作用是一樣的锹引,都是用于指定創(chuàng)建容器時(shí)要掃描的包。我們使用此類注解就等同于在xml中配置了:
<context:component-scan base-package="com.neusoft"></context:component-scan>
Bean:
作用:用于把當(dāng)前方法的返回值作為baen對(duì)象存入spring的ioc容器中
屬性:name唆香,用于指定bean的id嫌变,不寫時(shí)默認(rèn)值是當(dāng)前方法的名稱
細(xì)節(jié):當(dāng)我們使用注解配置方法時(shí),如果方法有參數(shù)躬它,spring框架回去容器中查找有沒有可用的bean對(duì)象腾啥,查找的方式和Autowired注解的機(jī)制相同
<!-- 配置QueryRunner-->
<bean id="runner" class="org.apache.commons.dbutils.QueryRunner">
<!-- 注入數(shù)據(jù)源-->
<constructor-arg name="ds" ref="dataSource"></constructor-arg>
</bean>
public class SpringConfiguration {
@Bean(name = "runner")
public QueryRunner createQueryRunner(DataSource dataSource){
return new QueryRunner(dataSource);
}
}
以上兩種方法相同
<!-- 配置數(shù)據(jù)源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/java9_spring"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
@Bean(name = "dataSource")
public DataSource createDataSource(){
try{
ComboPooledDataSource ds=new ComboPooledDataSource();
ds.setDriverClass("");
ds.setJdbcUrl("");
ds.setUser("");
ds.setPassword("");
return ds;
}catch (Exception e){
throw new RuntimeException(e);
}
}
以上兩種方式相同
此時(shí)獲取容器時(shí)就要用另外一個(gè)類:
// 獲取容器
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
Import:
作用:用于導(dǎo)入其他配置類
屬性:value,用于指定其他配置類的字節(jié)碼
當(dāng)我們使用Import的注解之后虑凛,有Import注解的類就是父配置類碑宴,而導(dǎo)入的都是子配置類
PropertySource:
作用:用于指定propertise文件的位置
屬性:value,指定文件的名稱和路徑
關(guān)鍵字:classpath桑谍,標(biāo)識(shí)類路徑下
關(guān)于JUnit測試
1延柠、應(yīng)用程序的的入口:main方法
2、junit單元測試中锣披,沒有main方法也能執(zhí)行贞间。junit集成了一個(gè)main方法,該方法就會(huì)判斷當(dāng)前測試類中哪些方法有@Test注解雹仿,junit就讓有Test注解的方法執(zhí)行
3增热、junit不會(huì)管我們是否采用spring框架,在執(zhí)行測試方法時(shí)胧辽,junit根本不知道我們是不是使用了spring框架峻仇,所以也就不會(huì)為我們讀取配置文件/配置類創(chuàng)建spring核心容器
4、由以上三點(diǎn)可知邑商,當(dāng)測試方法執(zhí)行時(shí)摄咆,沒有Ioc容器,就算寫了Autowired注解人断,也無法實(shí)現(xiàn)注入
Spring整合junit的配置
1吭从、導(dǎo)入spring整合junit的jar(坐標(biāo))
2、使用Junit提供的一個(gè)注釋把原有的main方法替換了恶迈,替換成spring提供的@Runwith
3涩金、告知spring的運(yùn)行器,spring和ioc創(chuàng)建時(shí)基于xml還是注解的暇仲,并且說明位置
@ContextConfiguration
location:指定xml文件的位置步做,加上classpath關(guān)鍵字,表示在類路徑下
classes:指定注解類所在的位置
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfiguration.class)
//有bean.xml文件時(shí)
@ContextConfiguration(locations = "classpath:bean.xml")