我最近遇到了这样的课程:
public class SomeDao {
@Inject
private DataSource dataSource;
@Value("#{someMap['someDao.sql']}")
private String sql;
private JdbcTemplate jdbcTemplate;
@PostConstruct
private void postConstruct() {
jdbcTemplate = new JdbcTemplate(dataSource);
}
...
}
现在我想通过注入 DataSource 和 SQL 字符串来对这个类进行单元测试。据我所知,有两种选择:
- 加载一个速度很慢的应用程序上下文,并且很可能会加载很多我不需要的测试内容
- 使用反射设置私有属性并调用私有 postConstruct() 方法
在 spring 注释之前的日子里,这个类应该是这样写的:
public class SomeDao {
private String sql;
private JdbcTemplate jdbcTemplate;
public SomeDao(DataSource dataSource, String sql) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
this.sql = sql;
}
...
}
而且我可以很容易地测试这个类,而不需要反射或弹簧。我的班级是一个纯粹的 pojo,没有 spring 依赖项。
那么,spring 注释是一件好事还是倒退了一步?是否有时我应该使用它们,有时我应该使用旧的 XML 应用程序上下文?
谢谢,兰斯。