main/test 注释方式 连接数据库

GitHub Code: feat: main/test 注释方式 连接数据库

核心还是

  1. 能扫描到@Component注释的类。

  2. @Bean创建需要配置的三方类,并且能被扫描到。

  3. 上面两点都做到了,如果不用@Resource注入的话,怎么获得context来获得bean。

main方式

使用AnnotationConfigApplicationContext 扫描注释

而不是在xml里使用<context:component-scan base-package="club.cser.springroad.jdbc.dao"></context:component-scan>

http://zetcode.com/spring/annotationconfigapplicationcontext/

package club.cser.springroad.jdbc.client;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

public class JdbcTemplateAnnotationClient {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
        ctx.scan("club.cser.springroad.jdbc.dao");
        ctx.refresh();

        //DataSource dataSource = ctx.getBean(DataSource.class);
        //JdbcTemplate jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
    }
}

Test方式

@Bean 创建三方库提供的类对象

原来是XML里配置了ComboPooledDataSourceJdbcTemplate两个bean,这两个类都是外部包提供,改成注释方式用@Configuration搭配@Bean创建。

JdbcTemplateBean.java 文件

读取properties文件

How to read values from properties file?

就是@PropertySource搭配@Autowired Environment env;使用,源码见上面。

test配置context

最简单的还是new ClassPathXmlApplicationContext("jdbc-bean.xml")加载xml,所有需要的bean都配置在xml里。

但是用注释的方式在junit里怎么获得context环境加载bean?

JUnit + Spring integration example

Spring with JUnit Testing and Dependency Injection does not work

  1. 需要引入spring-test包,使用@RunWith(SpringJUnit4ClassRunner.class)提供测试的context环境。

    {@code SpringJUnit4ClassRunner} is a custom extension of JUnit's {@link BlockJUnit4ClassRunner} which provides functionality of the Spring TestContext Framework to standard JUnit tests by means of the {@link TestContextManager} and associated support classes and annotations.

  2. @ContextConfiguration(classes = HelloDaoConfig.class)使用这个注释设置配置环境。

    @ContextConfiguration里面设置的值有多种用法,参考Spring @ContextConfiguration Classes Example

    HelloDaoConfig.java里设置了扫描的路径:

    Spring 3.1 M2: Testing with @Configuration Classes and Profiles 里面还介绍了如何junit和@ActiveProfiles("dev")搭配使用来隔离环境

HelloDaoTest.java文件

包版本

spring-test包和spring-context同样的版本,junit1原来用的4.11,会报错

Caused by: java.lang.IllegalStateException: SpringJUnit4ClassRunner requires JUnit 4.12 or higher.

Last updated

Was this helpful?