基于半注解半xml开发的基础上,将Spring ApplicationContext.xml配置文件替换成配置类。

在config目录下定义SpringConfig.java配置类

//@Congiguration 表明該類是一個配置類
@Configuration
//設置掃描
@ComponentScan(value = {"com.company"})
public class SpringConfig {
    private String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private String url="jdbc:sqlserver://localhost:1433;DatabaseName=testdb";
    private String username="sa";
    private String password="123.abc";

    /**
     * @Bean 將方法返回的DataSource對象放入Spring容器中
     */
    @Bean("dataSource")
    public DataSource getDataSource() throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    }

    /**
     * @Bean 將返回的QueryRunner對象放入到Spring容器中
     * @Qualifier 指定Spring容器中對應名字的DataSource對象 為方法參數
     */
    @Bean("queryRunner")
    public QueryRunner getQueryRunner(@Qualifier("dataSource") DataSource dataSource) throws Exception{
        return new QueryRunner(dataSource);
    }
}

@Configuration 表明该类是一个Spring配置类

@ComponentScan(value={"com.company"})  自动扫描组件,指定要扫描的包

@Bean("dataSource") 表明该方法返回的实例时受Spring管理的Bean

@Qualifier("dataSource") 表明方法中的参数是从Spring获取的Bean

优化一下,将数据源配置信息放至db.properties文件中

jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://localhost:1433;DatabaseName=testdb
jdbc.username=sa
jdbc.password=123.abc

使用@PropertySource({"classpath:db.properties"}),加载指定的属性文件。

使用@Value("${jdbc.driver}")给属性注入值

SpringConfig.java

//@Congiguration 表名該類是一個配置類
@Configuration
//設置掃描
@ComponentScan(value = {"com.company"})
@PropertySource({"classpath:db.properties"})
public class SpringConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    /**
     * @Bean 將方法返回的DataSource對象放入Spring容器中
     */
    @Bean("dataSource")
    public DataSource getDataSource() throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);
        return dataSource;
    }

    /**
     * @Bean 將返回的QueryRunner對象放入到Spring容器中
     * @Qualifier 指定Spring容器中對應名字的DataSource對象 為方法參數
     */
    @Bean("queryRunner")
    public QueryRunner getQueryRunner(@Qualifier("dataSource") DataSource dataSource) throws Exception{
        return new QueryRunner(dataSource);
    }
}

@Import 将标记的类注册成bean

测试

使用的Junit测试框架

    //如果是Spring配置类,则使用AnnotationConfigApplicationContext类来创建applicationContext
    @Test
    public void test(){
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
        AccountService accountService = applicationContext.getBean("accountService", AccountService.class);
        List<Account> accountList = accountService.queryAccountList();
        accountList.forEach(System.out::println);
    }
    //如果是Spring配置文件,则使用ClassPathXmlApplicationContext类来创建applicationContext
    @Test
    public void queryAccountList(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        AccountService accountService = applicationContext.getBean("accountService", AccountService.class);
        List<Account> accountList = accountService.queryAccountList();
        accountList.forEach(System.out::println);
    }

使用Spring整合测试框架

@RunWith(SpringJUnit4ClassRunner.class)
//如果使用Spring配置文件,则使用@ContextConfiguration注解的classes属性
@ContextConfiguration(classes = SpringConfig.class)
//如果使用Spring配置类,则使用@ContextConfiguration注解的locations属性
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})

 

 posted on 2019-10-25 21:39  会飞的金鱼  阅读(469)  评论(0)    收藏  举报