私は最近、次のようなクラスに出くわしました。
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 文字列を挿入して、このクラスを単体テストしたいと思います。私が見る限り、これには 2 つのオプションがあります。
- 遅くなるアプリケーションコンテキストをロードし、テストに必要のないものを大量にロードする可能性が最も高い
- リフレクションを使用してプライベート プロパティを設定し、プライベート postConstruct() メソッドを呼び出します
春のアノテーションの前の時代には、クラスは次のように書かれていました:
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 の依存関係はありませんでした。
では、スプリング アノテーションは良いものですか、それとも一歩後退しているのでしょうか? それらを使用する必要がある場合と、古い XML アプリ コンテキストを使用する必要がある場合はありますか?
ありがとう、ランス。