基于半注解半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
浙公网安备 33010602011771号