spring注解3----@import

上篇中我们使用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容器中。

猜你喜欢

转载自blog.csdn.net/dimples_qian/article/details/81460010