Spring Boot で applicationContext.xml の ref 属性を表現する
Spring Framework 4、および Boot あたりから、本格的にアノテーションベースのコンフィグレーションに移行が進んでいる。これに際して、Spring Framework が直接使用するコンフィグレーションに関しては、すべてアノテーションベースに移行しようと思い試したところ、表題にあるような、applicationContext.xml
でごく普通に使用していた、ref 属性に相当する書き方はどのようになるのか、しばらく書き方がわからず、けっこうハマったので残しておく。
書き方はというと、参照される側 (@Bean
属性を適用した Bean メソッド) の名前をキーに使用して、参照する側 (ref 属性を使用したい Bean メソッド) の引数で、オートワイヤリングして、DI をかけてやる。名前の特定には、@Qualifier
アノテーションを使用する。以下のようになる。
@Autowired @Bean public SqlSessionTemplate sqlSessionTemplate( @Qualifier("dataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); ResourcePatternResolver resolver = ResourcePatternUtils.getResourcePatternResolver( new DefaultResourceLoader()); bean.setConfigLocation(resolver.getResource("classpath:mybatis-config.xml")); bean.setMapperLocations(resolver.getResources("classpath:sql/*.xml")); return new SqlSessionTemplate(bean.getObject()); } @Primary @Autowired @Bean public DriverManagerDataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); // dataSource.set ... return dataSource; }
このように ref 属性相当の書き方をしないとならない場面が少なからずあるので、必ずおさえておきたい。