Spring Beanの記述方法(XML編)
Spring BeanではアノテーションとXMLでの記述があります。
私はBean使わずにComponentとか使ってればええやんみたいなスタンスだったので、
公式ドキュメントを読む際に支障をきたしまして。。。
(ほんとはきちんと理解した上で使うべきですが、個人のやることなのでね)
そのため理解するために、勉強したのでまとめようかなぁと。
とりあえず適当なBean
public class HogeBean { private String name; private int age; public HogeBean(String name, int age) { this.name = name; this.age = age; } public HogeBean() {} public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "name:" + name + " age:" + age; } }
XMLベースでの記述
<?xml version="1.0" encoding="utf-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 1. setterを利用した初期値の代入 --> <bean id="hogebean" class="tutorial.Hoge"> <property name="name" value="hoge"/> <property name="age" value="10"/> </bean> <!-- 以下と同じ Hoge h = new Hoge("fugafuga",20); --> <!-- 2. コンストラクタを利用した初期値の代入--> <bean id="hogehoge" class="tutorial.Hoge"> <constructor-arg type="java.lang.String" name="name" value="hogehoge"/> <constructor-arg type="int" name="age" value="20"/> </bean> </beans>
1と同じ意味を持つコードは以下になります。
Hoge h = new Hoge(); h.setName("hoge"); h.setAge(10);
propertyタグname要素に指定したプロパティ名のセッターに対して、valueの値が渡されます。
valueの代わりにrefタグを使用することで、定義された他のBeanを引数に使用できます。
<!-- 例 --> <bean id="fuga" class="tutorial.Fuga"> <!-- refには他BeanのIDを指定する --> <property name="name" ref="hoge"/> </bean>
2と同じ意味を持つコードは以下になります。
Hoge h = new Hoge("hogehoge",20);
typeで型を指定。(独自データ型の指定も可能)
name属性で代入する引数名の指定。
valueは言わずもがな。
propertyと同様にref属性を利用できる
public class App { public static void main( String[] args ) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // 1の呼び出し Hoge bean = context.getBean("hogebean", Hoge.class); System.out.println( bean ); // 2の呼び出し bean = context.getBean("hogehoge", Hoge.class); System.out.println(bean); } }
Mainメソッド出力
name:hoge age:10 name:hogehoge age:20