3.春の豆
3.1ビーンの設定
春は春のコンテナ豆の生産と管理のための大規模な工場として見ることができます。あなたはこの工場の生産と管理Beanを使用する場合は、ビーンの開発者はSpring構成ファイルを設定する必要があります。Springフレームワークは、XMLプロパティの2つの設定ファイルのフォーマット、実際の開発では、XML形式での一般的なコンフィギュレーション・ファイルをサポートしています。
3.1.1 <bean>
共通の属性と子要素
コードの3.1.2ビーン構成例
<?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">
<!-- 使用id属性定义myTestDIDao,其对应的实现类为dao.TestDIDaoImpl-->
<bean id="myTestDIDao" class="dao.TestDIDaoImpl" />
<!-- 使用构造方法注入 -->
<bean id="testDIService" class="service.TestDIServiceImpl">
<!-- 给构造方法传引用类型的参数值myTestDIDao -->
<constructor-arg index="0" ref="myTestDIDao"/>
</bean>
</beans>
3.2ビーンのインスタンス化
Springフレームワークでは、あなたがコンテナ春ビーン、ビーンをインスタンス化する必要性を使用する場合。スプリングフレームワークのビーンそこの例3つの方法、すなわちコンストラクタインスタンス化され、静的ファクトリのインスタンス化、および植物の例は、インスタンス化された場合、最も一般的であるインスタンス化コンストラクタは。
3.2.1コンストラクタインスタンス化
Springフレームワークでは、春のコンテナ設定パラメータがBeanのインスタンスに対応するBeanクラスメソッドなしで呼び出すことができ、このコンストラクタは、インスタンスと呼ばれます。
プレゼンテーションの例:
Webアプリケーションを作成し、srcディレクトリにインスタンスパッケージを作成し、パッケージにたbeanClassクラスを作成します
package instance; public class BeanClass { public String message; public BeanClass() { message = "构造方法实例化Bean"; } public BeanClass(String s) { message = s; } }
プロフィールを作成
<?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"> <!-- 构造方法实例化Bean--> <bean id="constructorInstance" class="instance.BeanClass" /> </beans>
テストクラスを作成します。
package test; import instance.BeanClass; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestInstance { public static void main(String[] args) { // 初始化Spring容器ApplicationContext,加载配置文件 ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml"); // 测试构造方法实例化Bean BeanClass b1 = (BeanClass) appCon.getBean("constructorInstance"); System.out.println(b1+b1.message); } }
業績
staticファクトリの3.2.2例
豆の静的ファクトリのインスタンスを使用する場合は、開発者が必要となるBeanのインスタンスを作成するファクトリクラスの静的メソッドを作成します。豆を設定する場合、クラス属性も、工場出荷時にメソッドプロパティは、クラスの静的ファクトリメソッドを指定する必要があり、静的なファクトリクラスを指定します。
プレゼンテーションの例:
ファクトリクラスBeanStaticFactoryを作成し、パッケージ内のファクトリクラスBeanStaticFactoryインスタンスを作成します
package instance; public class BeanStaticFactory { private static BeanClass beanInstance = new BeanClass("调用静态工厂方法实例化Bean"); public static BeanClass createInstance() { return beanInstance; } }
プロフィールの編集
<?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"> <!-- 静态工厂方法实例化Bean,createInstance为静态工厂类BeanStaticFactory中的静态方法--> <bean id="staticFactoryInstance" class="instance.BeanStaticFactory" factory-method="createInstance" /> </beans>
テストコードを追加します。
package test; import instance.BeanClass; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestInstance { public static void main(String[] args) { // 初始化Spring容器ApplicationContext,加载配置文件 ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml"); // 测试静态工厂方法实例化Bean BeanClass b2 = (BeanClass) appCon.getBean("staticFactoryInstance"); System.out.println(b2+b2.message); } }
業績
インスタンス化された植物の例としては3.2.3
例豆の植物をインスタンス化する場合、開発者が必要とビーンのインスタンスを作成するために、工場内でクラスメソッドのインスタンスを作成します。ビーン設定する際に必要な工場法プロパティで指定さに植物の構成例を、また、工場出荷時にmethod属性の使用は、植物における例インスタンスのメソッドを指定する必要があり。
ファクトリクラスを作成しますBeanStaticFactory
パッケージ内に作成されたBeanInstanceFactoryファクトリクラスのインスタンスは、オブジェクトクラスのインスタンスメソッドをインスタンス化するクラスがあります
package instance; public class BeanInstanceFactory { public BeanClass createBeanClassInstance() { return new BeanClass("调用实例工厂方法实例化Bean"); } }
プロフィールの編集
<?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"> <!-- 配置工厂--> <bean id="myFactory" class="instance.BeanInstanceFactory" /> <!-- 使用factory-bean属性指定配置工厂,使用factory-method属性指定使用工厂中的哪个方法实例化Bean--> <bean id="instanceFactoryInstance" factory-bean="myFactory" factory-method="createBeanClassInstance" /> </beans>
テストコードを追加します。
package test; import instance.BeanClass; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestInstance { public static void main(String[] args) { // 初始化Spring容器ApplicationContext,加载配置文件 ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml"); // 测试实例工厂方法实例化Bean BeanClass b3 = (BeanClass) appCon.getBean("instanceFactoryInstance"); System.out.println(b3+b3.message); } }
業績
3.3ビーンのスコープ
3.3.1 スプリング5.0スコープBean内のインスタンスに定義され
シングルトンとプロトタイプは、ウェブSpringアプリケーションコンテキストを作るために使用されるスコープに4が続き、最も一般的に使用される2、です。
3.3.2シングルトンスコープ
範囲はビーンシングルトン、に設定されている場合、春と管理のみIoCコンテナは、ビーン・インスタンスを生成します。IDまたはインスタンス名の取得豆を使用する場合は、IoCコンテナは、Beanインスタンスの共有を返します。
シングルトンの範囲は、Beanのスコープがシングルトンに設定されている2つの方法がありますデフォルトモード。例としては、次のとおりです:
<bean id="constructorInstance" class="instance.BeanClass" />
若しくは
<bean id="constructorInstance" class="instance.BeanClass" scope="singleton"/>
IDまたはインスタンス名を使用する場合は豆、IoCコンテナのリターンだけ同じBeanインスタンスを取得します。
3.3.3プロトタイプのスコープ
Beanのスコープはプロトタイプに設定されている場合は、春のIoCコンテナは各リクエストの新しいインスタンスを作成します。例としては、次のとおりです:
<bean id="constructorInstance" class="instance.BeanClass" scope="prototype"/>
3.4ビーンのライフサイクル
- Beanのライフサイクル:
- ステップテキストの説明:
- 春が見つけ、起動し、負荷が春、ビーンがインスタンス化されたBeanを管理する必要があります。
- ビーンは、プロパティのビーンビーン値に導入し、注入されるインスタンス化。
- Beanのインタフェースを実装する場合、BeanNameAware、Idの春豆setBeanName()メソッドに渡されます。
- Beanのインタフェースを実装する場合、BeanFactoryAwareは、春たBeanFactoryコンテナインスタンスを渡し、setBeanFactory()メソッドを呼び出します。
- Beanのインタフェースを実装する場合、ApplicationContextAwareは、春は、アプリケーションコンテキストBean参照が渡さsetApplicationContext Beanの()メソッドを呼び出します。
- 豆はBeanPostProcessorインタフェースを実装する場合は、春には、そのpostProcessBeforeInitialization()メソッドを呼び出します。
- BeanのインタフェースInitializingBeanを実装している場合、春には、そのafterPropertiesSet()メソッドを呼び出します。同様に、initメソッドを使用して、豆も呼ばれる初期化メソッドを宣言している場合
- 豆はBeanPostProcessorインタフェースを実装する場合は、春には、そのpostProcessAfterInitialization()メソッドを呼び出します。
- この時、ビーンは、アプリケーションが使用することができ、準備ができています。アプリケーションコンテキストが破壊されるまで、彼らは常に、アプリケーションコンテキストに存在します。
- 豆実装インタフェースDisposableBean場合ビーンも呼ばれるDestoryは、メソッド宣言破壊法を使用する場合、スプリングは、同様にそのDestoryは()インターフェースのメソッドを呼び出します。
例としては、Beanのライフサイクルを示します。
Bean実装クラスを作成します。
srcディレクトリに命パッケージの作成、ライフBeanLifeパッケージ内のクラスを作成します。BeanLifeクラスの二つの方法、デモの初期化方法、破壊プロセスのデモンストレーションがあります。
package life; public class BeanLife { public void initMyself() { System.out.println(this.getClass().getName()+"执行自定义的初始化方法"); } public void destoryMyself() { System.out.println(this.getClass().getName()+"执行自定义的销毁方法"); } }
コンフィグレーションBean
実装BeanLifeはSpring構成ファイル内のBeanのid beanLifeを構成するクラス。
<?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"> <!-- 配置bean,使用iniit-method属性指定初始化方法,使用destroy-method属性指定销毁方法--> <bean id="beanLife" class="life.BeanLife" init-method="initMyself" destroy-method="destoryMyself" /> </beans>
テストのライフサイクル
テストパッケージのテストクラスTestLifeを作成します。
package test; import life.BeanLife; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestLife { public static void main(String[] args) { // 初始化Spring容器,加载配置文件 // 为了方便演示销毁方法的执行,这里使用ClassPathXmlApplicationContext // 实现类声明容器 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); System.out.println("获得对象前"); BeanLife blife = (BeanLife)ctx.getBean("beanLife"); System.out.println("获得对象后" + blife); ctx.close(); //关闭容器,销毁Bean对象 } }
業績
3.5ビーンのフィッティングの方法
Beanは、アセンブリと理解することができる豆依存Springコンテナに注入され、アセンブリの依存性注入方式ことビーンビーン方法。
アセンブリの3.5.1 XMLベースの構成
使用中に注入法ビーン組立工法を Bean実装クラスが場合、パラメータを提供する必要にコンストラクタ、およびコンフィギュレーションファイルに
プレゼンテーションの例:
Bean実装クラスを作成します。
srcディレクトリにあるパッケージを組み立てるの作成、パッケージを組み立てる下ComplexUserクラスを作成します。それぞれの注射のセッター及び使用特性ComplexUserクラスを使用して、コンストラクタ注入方法。
package assemble; import java.util.List; import java.util.Map; import java.util.Set; public class ComplexUser { private String uname; private List<String> hobbyList; private Map<String,String> residenceMap; private Set<String> aliasSet; private String[] array; /* 使用构造方法注入,需要提供带参数的构造方法 */ public ComplexUser(String uname, List<String> hobbyList, Map<String, String> residenceMap, Set<String> aliasSet, String[] array) { super(); this.uname = uname; this.hobbyList = hobbyList; this.residenceMap = residenceMap; this.aliasSet = aliasSet; this.array = array; } /** * 使用属性的setter方法注入,提供默认无参数的构造方法,并为注入的属性提供setter方法 */ public ComplexUser() { super(); } @Override public String toString() { return "uname=" + uname + ";hobbyList=" + hobbyList + ";residenceMap=" + residenceMap + ";aliasSet=" + aliasSet +";array=" + array; } // 此处为所有属性的setter方法 public void setUname(String uname) { this.uname = uname; } public void setHobbyList(List hobbyList) { this.hobbyList = hobbyList; } public void setResidenceMap(Map residenceMap) { this.residenceMap = residenceMap; } public void setAliasSet(Set aliasSet) { this.aliasSet = aliasSet; } public void setArray(String[] array) { this.array = array; } }
コンフィグレーションBean
実装クラスを使用してComplexUserは、2つのインスタンスビーンSpring構成ファイル内に配置されました。
<?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"> <!-- 使用构造方法注入方式装配ComplexUser实例user1--> <bean id="user1" class="assemble.ComplexUser"> <constructor-arg index="0" value="yihang1" /> <constructor-arg index="1"> <list> <value>唱歌</value> <value>跳舞</value> <value>爬山</value> </list> </constructor-arg> <constructor-arg index="2"> <map> <entry key="dalian" value="大连" /> <entry key="beijing" value="北京" /> <entry key="shanghai" value="上海" /> </map> </constructor-arg> <constructor-arg index="3"> <set> <value>逸航01</value> <value>逸航02</value> <value>逸航03</value> </set> </constructor-arg> <constructor-arg index="4"> <array> <value>aaaaa</value> <value>bbbbb</value> </array> </constructor-arg> </bean> <!-- 使用属性的setter方法注入方式装配 ComplexUser实例user2--> <bean id="user2" class="assemble.ComplexUser"> <property name="uname" value="yihang2" /> <property name="hobbyList"> <list> <value>看书</value> <value>学习Spring</value> </list> </property> <property name="residenceMap" > <map> <entry key="shenzhen" value="深圳" /> <entry key="guangzhou" value="广州" /> <entry key="tianjin" value="天津" /> </map> </property> <property name="aliasSet"> <set> <value>逸航04</value> <value>逸航05</value> <value>逸航06</value> </set> </property> <property name="array"> <array> <value>ccccc</value> <value>ddddd</value> </array> </property> </bean> </beans>
組立XML道のテスト構成に基づいて、
テストパッケージのテストクラスTestAssembleを作成します。
package test; import assemble.ComplexUser; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestAssemble { public static void main(String[] args) { ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml"); // 使用构造方法装配测试 ComplexUser u1 = (ComplexUser) appCon.getBean("user1"); System.out.println(u1); System.out.println("-------------------------"); // 使用setter方法装配测试 ComplexUser u2 = (ComplexUser) appCon.getBean("user2"); System.out.println(u2); } }
業績
3.5.2アノテーションベースのアセンブリ
豆は、アセンブリのXML設定ファイルの大規模な数が多すぎると、将来のアップグレードやメンテナンス、したがって、より頻繁に開発者が使用をお勧めすると便利ではありませんつながる注釈(アノテーション)豆を組み立てるための方法を。
3.5.1.1 @Component
アノテーションは、任意のレベルで作用することができる、唯一のコンポーネントオブジェクト(豆)を表し、概念の一般化です。
3.5.2.2 @Repository
データアクセス層のための注釈(DAO)は即ち注釈データアクセス層豆、豆クラスとして識別され、機能が同じ@Componentあります。
3.5.2.3 @Service
ビジネスロジックコンポーネントクラスラベル(サービス層)関数の注釈は同じ@Componentです。
3.5.2.4 @Controller
アノテーションコンポーネントクラスは、同じ機能@Componentあるコントローラ(コントローラのスプリングMVC)を注釈するために使用されます。
3.5.2.5 @Autowired
クラスメンバ変数、メソッドおよび自動組立作業の施工方法に注釈を付けることができる注釈が完成します。setterメソッドとgetterメソッドを排除するために@Autowiredを使用することにより。デフォルトのタイプは、豆に合わせて組み立てられています。
3.5.2.6 @Resource
ノートおよび@Autowired関数名デフォルトでノートはBeanの名前は、注射の種類に応じて、組み立てられると、一致が見つからない場合にのみ、注射を組み立てることであることを除いて、通りであり;そして@Autowiredデフォルト豆の種類に応じてあなたがアセンブリを注入したい場合は、名前で必要と@Qualifier注釈が一緒に使用され、組み立て。
3.5.3.7 @Qualifier
ノートは@Aitowiredコメントと併せて使用しました。名前とコメントに従って必要な注入@Autowired注釈を組み立てるために必要な場合には、Beanインスタンス名が@Qualifier注釈パラメータによって開発されました。
プレゼンテーションの例:
DAO層を作成します
SRC annotation.daoパッケージで作成され、パケットにインタフェースTestDao TestDaoImpl実装クラスを作成し、実装クラスTestDaoImplは@Repository注釈データアクセス層を用いて標識。
次のようにTestDaoコードは次のとおりです。
package annotation.dao; public interface TestDao { public void save(); }
次のようにTestDaoImplコードは次のとおりです。
package annotation.dao; import org.springframework.stereotype.Repository; @Repository("testDao") /** * 相当于@Repository,但如果在service层中使用@Resource(name="testDao"), * testDao不能省略 */ public class TestDaoImpl implements TestDao { @Override public void save() { System.out.println("testDao save"); } }
サービス層を作成します
SRCのannotation.serviceパッケージ内に作成し、ラベルYewuluojicengを使用して、パケットのインターフェイスTestService TestServiceImpl実装クラス、および実装クラスTestServiceImplの@service注釈を作成します。
次のようにTestserviceコードは次のとおりです。
package annotation.service; public interface TestService { public void save(); }
次のようにTestServiceImplコードは次のとおりです。
package annotation.service; import annotation.dao.TestDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("testService") //相当于@Service public class TestSerivceImpl implements TestService { // @Resource(name="testDao") @Autowired // 相当于@Autowired,@Autowired默认按照Bean状态装配 private TestDao testDao; @Override public void save() { testDao.save(); System.out.println("testService save"); } }
コントローラレイヤの作成
パケットTestControllerクラスで作成されたのsrc annotation.controllerパケットに作成され、クラスTestControllerは@Controller注釈層コントローラを使用して標識。
次のようにTestControllerコードは次のとおりです。
package annotation.controller; import annotation.service.TestService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @Controller public class TestController { @Autowired private TestService testService; public void save() { testService.save(); System.out.println("testController save"); } }
設定に関する注意
annotation.dao、annotation.serviceとannotation.controllerパッケージは、すべてのサブパッケージ注釈パッケージであるため、その設定プロファイルannotationContext.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="annotation" /> </beans>
テストクラスを作成します。
package test; import annotation.controller.TestController; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestMoreAnnotation { public static void main(String[] args) { ApplicationContext appCon = new ClassPathXmlApplicationContext("annotationContext.xml"); TestController testcon = (TestController) appCon.getBean("testController"); testcon.save(); } }
業績