[Spring実戦シリーズ](15)Springを使用したJavaベースの構成
41105 ワード
すべての開発者がXMLを好むわけではないので、Spring 3.0は彼らのために特別なものを用意しています.XMLをほとんど使用せずに純粋なJavaコードを使用してSpringアプリケーションを構成できます.Javaベースの構成には、XML構成にはないテクニックがあります.
1.Javaベースの構成の作成
SpringのJava構成でXMLを使わずにほとんどのSpring構成を記述できるようになったとしても、
Java構成を有効にするには、ごく少量のXMLが必要です.
が、ある構造(stereotype)注釈を使用して表記されたBeanを自動的に登録する方法を知っています.ただし、@Configuration注記を使用してマークアップされたクラスも自動的にロードされます.この例では、
base-packageプロパティは、Springがcom.sjf.beanパッケージ内で@Configuration注釈を使用してマークされたすべてのクラスを検索することを通知します.
2.構成クラスの定義
SpringベースのXML構成の場合、XML構成のルート要素はSpring Beanネーミングスペースからの要素です.そして
Javaベース構成では、XML構成の要素の代わりに@Configuration注記のJavaクラスを使用します.
@Configuration注記を表示としてSpringに通知します.
このクラスには、1つ以上のSpring Beanの定義が含まれます.これら
Beanの定義は@Bean注記を使用して表記する方法です.
3.単純クラスを宣言
@Bean注記を使用してstudentBean Beanを定義します.
この簡単な方法はJava構成であり、XMLを使用して以前に構成した要素と等価です.
@BeanはSpringメソッドがSpringアプリケーションコンテキストのBeanとして登録されるオブジェクトを返すことを通知します.メソッド名は、このBeanのIDとして使用されます.この方法で実装されるすべての論理は本質的にBeanを作成するためである.上記の例では、SpringアプリケーションコンテキストでstudentBeanとしてIDが登録されたBeanとして登録されたStudioのインスタンスオブジェクトを作成して返します.
メリット:
XML構成ではBeanのタイプとIDはSpring属性で表される.Spring識別子の欠点は、コンパイラチェックができないことです.SpringのJavaベースの構成にはString属性はありません.BeanのIDとタイプはメソッド署名の一部とみなされる.Beanの実際の作成はメソッドボディで定義されています.これらはすべてJavaコードなので、コンパイラでBeanのタイプが正当なタイプであり、BeanのIDが一意であることを確認できます.
4.SpringのJavaベースのコンビネーションで注入
以前のコンストラクタ注入の使用方法では、Javaの構成を使用するには、コンストラクタに数値を直接入力するだけで済みます.
Javaの構成を使用して、Beanを定義することは、Javaを使用してクラスのインスタンス化コードを記述するのと同じです.
Javaの構成でsetter注入を見てみましょう.どのように実現しますか.
では、Beanは別のBeanの参照をアセンブリしますか?
まず、参照するBeanを作成します.
次に、Beanを参照する方法を見てみましょう.コンストラクタを使用して、上のBeanをアセンブリします.
注意:
SpringのJava構成では、宣言メソッドによってBeanを参照することは、メソッドを呼び出すことに等しくありません.もしそうであれば、schoolBean()が呼び出されるたびに、Beanの新しいインスタンスが得られます.@Bean注記を使用してschoolBean()メソッドをマークすると、Springにこのメソッドで定義したBeanをSpringのアプリケーションコンテキストに登録するように通知されます.したがって、他のBeanの宣言メソッドでこのメソッドを使用すると、Springはメソッドの呼び出しをブロックし、メソッドに新しいインスタンスを作成するのではなく、適用コンテキストでBeanを検索しようとします.
5.運転
クラス定義を構成すると、AnnotationConfigApplicationContextを次のようにロードして提供できます.
参考:『Spring実戦』
1.Javaベースの構成の作成
SpringのJava構成でXMLを使わずにほとんどのSpring構成を記述できるようになったとしても、
Java構成を有効にするには、ごく少量の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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.sjf.bean">
</context:component-scan>
</beans>
base-packageプロパティは、Springがcom.sjf.beanパッケージ内で@Configuration注釈を使用してマークされたすべてのクラスを検索することを通知します.
2.構成クラスの定義
SpringベースのXML構成の場合、XML構成のルート要素はSpring Beanネーミングスペースからの
Javaベース構成では、XML構成の
package com.sjf.bean;
import org.springframework.context.annotation.Configuration;
/**
* Java
* @author sjf0115
*
*/
@Configuration
public class SpringConfig {
// Bean declaration methods
}
@Configuration注記を表示としてSpringに通知します.
このクラスには、1つ以上のSpring Beanの定義が含まれます.これら
Beanの定義は@Bean注記を使用して表記する方法です.
3.単純クラスを宣言
@Bean注記を使用してstudentBean Beanを定義します.
package com.sjf.bean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Java
* @author sjf0115
*
*/
@Configuration
public class SpringConfig {
// Bean declaration methods
@Bean
public Student studentBean(){
return new Student();
}
}
この簡単な方法はJava構成であり、XMLを使用して以前に構成した
<bean id = "studentBean" class = "com.sjf.bean.Student">
</bean>
@BeanはSpringメソッドがSpringアプリケーションコンテキストのBeanとして登録されるオブジェクトを返すことを通知します.メソッド名は、このBeanのIDとして使用されます.この方法で実装されるすべての論理は本質的にBeanを作成するためである.上記の例では、SpringアプリケーションコンテキストでstudentBeanとしてIDが登録されたBeanとして登録されたStudioのインスタンスオブジェクトを作成して返します.
メリット:
XML構成ではBeanのタイプとIDはSpring属性で表される.Spring識別子の欠点は、コンパイラチェックができないことです.SpringのJavaベースの構成にはString属性はありません.BeanのIDとタイプはメソッド署名の一部とみなされる.Beanの実際の作成はメソッドボディで定義されています.これらはすべてJavaコードなので、コンパイラでBeanのタイプが正当なタイプであり、BeanのIDが一意であることを確認できます.
4.SpringのJavaベースのコンビネーションで注入
以前のコンストラクタ注入の使用方法では、Javaの構成を使用するには、コンストラクタに数値を直接入力するだけで済みます.
@Bean
public Student studentBean(){
return new Student("yoona",24);
}
Javaの構成を使用して、Beanを定義することは、Javaを使用してクラスのインスタンス化コードを記述するのと同じです.
Javaの構成でsetter注入を見てみましょう.どのように実現しますか.
@Bean
public Student studentBean(){
Student stu = new Student();
stu.setName("yoona");
stu.setAge(24);
return stu;
}
では、Beanは別のBeanの参照をアセンブリしますか?
まず、参照するBeanを作成します.
@Bean
public School schoolBean(){
School school = new School();
school.setName(" ");
school.setLocation(" ");
return school;
}
次に、Beanを参照する方法を見てみましょう.コンストラクタを使用して、上のBeanをアセンブリします.
@Bean
public Student yoonaStudent(){
return new Student(schoolBean());
}
注意:
SpringのJava構成では、宣言メソッドによってBeanを参照することは、メソッドを呼び出すことに等しくありません.もしそうであれば、schoolBean()が呼び出されるたびに、Beanの新しいインスタンスが得られます.@Bean注記を使用してschoolBean()メソッドをマークすると、Springにこのメソッドで定義したBeanをSpringのアプリケーションコンテキストに登録するように通知されます.したがって、他のBeanの宣言メソッドでこのメソッドを使用すると、Springはメソッドの呼び出しをブロックし、メソッドに新しいインスタンスを作成するのではなく、適用コンテキストでBeanを検索しようとします.
5.運転
クラス定義を構成すると、AnnotationConfigApplicationContextを次のようにロードして提供できます.
package com.sjf.bean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test {
private static ApplicationContext context;
public static void main(String[] args){
context = new AnnotationConfigApplicationContext(SpringConfig.class);
Student student = (Student)context.getBean("yoonaStudent");
student.setName("yoona");
student.setAge(24);
System.out.println(student.toString());
}
}
参考:『Spring実戦』