Spring Boot での Bean 定義
Spring Boot でアプリケーションを作成する際に、プレーンな Spring Framework を使用した場合との違いでまず大きいのが、Bean の定義ではないかと思う。XML ベースの定義が基本的にはアノテーションベースに置き換わる。(もちろん XML ベースでの記述も可能ではあるが、多くのサンプルがアノテーションベースなので、これを理解したほうが良い。)
さて、これまで Bean 定義というと、以下のように書いていたかと思う。
<?xml version="1.0" encoding="UTF-8"?> <beans ...> <context:component-scan/> <bean id="mongoTemplate" name="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongo" ref="mongo"/> <constructor-arg name="databaseName" value="example_db"/> </bean> <bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean"> <constructor-arg name="host" value="127.0.0.1"/> <constructor-arg name="port" value="27017"/> </beans>
これが、以下のように変わる。
@SpringBootApplication // <context:component-scan/> に対応 public class Application { /** * アプリケーションの起動ポイント */ public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } @Bean public MongoTemplate mongoTemplate() throws Exception { return new MongoTemplate( this.mongo(), // <constructor-arg name="mongo" ref="mongo"/> に対応 "example_db"); // <constructor-arg name="databaseName" value="example_db"/> に対応 } @Bean public Mongo mongo() throws Exception { return new Mongo( "127.0.0.1", // <constructor-arg name="host" value="127.0.0.1"/> に対応 "27017"); // <constructor-arg name="port" value="27017"/> に対応 } }
コントローラや、サービスレイヤからはこれまでどおり、@Resource や、@Autowired アノテーションからインジェクションをかけることができる。