main/test 注释方式 连接数据库
GitHub Code: feat: main/test 注释方式 连接数据库
核心还是
能扫描到
@Component注释的类。用
@Bean创建需要配置的三方类,并且能被扫描到。上面两点都做到了,如果不用
@Resource注入的话,怎么获得context来获得bean。
main方式
使用AnnotationConfigApplicationContext 扫描注释
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里配置了ComboPooledDataSource和JdbcTemplate两个bean,这两个类都是外部包提供,改成注释方式用@Configuration搭配@Bean创建。
JdbcTemplateBean.java 文件
JdbcTemplateBean.java 文件读取properties文件
就是@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
需要引入
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.
@ContextConfiguration(classes = HelloDaoConfig.class)使用这个注释设置配置环境。@ContextConfiguration里面设置的值有多种用法,参考Spring @ContextConfiguration Classes ExampleHelloDaoConfig.java里设置了扫描的路径:Spring 3.1 M2: Testing with @Configuration Classes and Profiles 里面还介绍了如何junit和
@ActiveProfiles("dev")搭配使用来隔离环境
HelloDaoTest.java文件
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?