创建一个config包,在包中创建一个SpringConfiguration类,该类是一个配置类,他的作用和bean.xml是一样的
spring中的新注解
Configuration
作用:指定当前类是一个配置类
ComponentScan
作用:用于通过注解指定spring在创建容器时要扫描的包
属性:value,它和basePackages作用是一样的,都是用于指定创建容器时要扫描的包。我们使用此类注解就等同于在xml中配置了:
<context:component-scan base-package="com.neusoft"></context:component-scan>
Bean:
作用:用于把当前方法的返回值作为baen对象存入spring的ioc容器中
属性:name,用于指定bean的id,不写时默认值是当前方法的名称
细节:当我们使用注解配置方法时,如果方法有参数,spring框架回去容器中查找有没有可用的bean对象,查找的方式和Autowired注解的机制相同
<!-- 配置QueryRunner-->
<bean id="runner" class="org.apache.commons.dbutils.QueryRunner">
<!-- 注入数据源-->
<constructor-arg name="ds" ref="dataSource"></constructor-arg>
</bean>
public class SpringConfiguration {
@Bean(name = "runner")
public QueryRunner createQueryRunner(DataSource dataSource){
return new QueryRunner(dataSource);
}
}
以上两种方法相同
<!-- 配置数据源-->
<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);
}
}
以上两种方式相同
此时获取容器时就要用另外一个类:
// 获取容器
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
Import:
作用:用于导入其他配置类
属性:value,用于指定其他配置类的字节码
当我们使用Import的注解之后,有Import注解的类就是父配置类,而导入的都是子配置类
PropertySource:
作用:用于指定propertise文件的位置
属性:value,指定文件的名称和路径
关键字:classpath,标识类路径下
关于JUnit测试
1、应用程序的的入口:main方法
2、junit单元测试中,没有main方法也能执行。junit集成了一个main方法,该方法就会判断当前测试类中哪些方法有@Test注解,junit就让有Test注解的方法执行
3、junit不会管我们是否采用spring框架,在执行测试方法时,junit根本不知道我们是不是使用了spring框架,所以也就不会为我们读取配置文件/配置类创建spring核心容器
4、由以上三点可知,当测试方法执行时,没有Ioc容器,就算写了Autowired注解,也无法实现注入
Spring整合junit的配置
1、导入spring整合junit的jar(坐标)
2、使用Junit提供的一个注释把原有的main方法替换了,替换成spring提供的@Runwith
3、告知spring的运行器,spring和ioc创建时基于xml还是注解的,并且说明位置
@ContextConfiguration
location:指定xml文件的位置,加上classpath关键字,表示在类路径下
classes:指定注解类所在的位置
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfiguration.class)
//有bean.xml文件时
@ContextConfiguration(locations = "classpath:bean.xml")