上篇中我们使用SpringConfiguration类来作为spring的配置类,那现在我们希望将其中关于数据库的配置信息分离到另一个JdbcConfig类中,这时候该怎么读取呢?
一:扫描JdbcConfig类所在的包
@ComponentScan({"com.dimples","com.utils"})
public calss SpringConfiguration{
}
JdbcConfig类(在com.utils包下):
@Component
public class SpriingConfiguration{
@Bean(name="runner") //把返回值存到spring容器中。该注解有个属性叫name,用于指定bean的id,不指定时默认是方法名。
public QueryRunner createQueryRunner(DataSource dataSource){
return new QueryRunner(dataSource);
}
@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);
}
}
}
这种方式在读取SpringConfiguration的时候,会扫描JdbcConfig类所在的包,从而达到了也读取JdbcConfig类,将其实例化,并将其存入spring容器中。但这种方式并不好,因为JdbcConfig只是一个配置类,我们只需要将它方法的返回值装载到spring容器中就好,并不需要实例化这个配置类本身。
第二种,直接将JdbcConfig类导入即可:
@Configuration
@ComponentScan("com.dimples")
@import({JdbcConfig.class})
public class SpringConfiguration{
}
JdbcConfig类就不贴代码了,就是上面的JdbcConfig类去掉@Component就行了。
解析:这种方式,就是将JdbcConfig类也读取,并实例化,执行其中的方法,但是并不会将这个类的实例存入spring容器中。