spring日記(三):Iocにビーンを組み立てる

4905 ワード

JavaBeanは、大文字で始まる属性変数名を許可しますが、変数の最初の2文字またはすべての大文字またはすべての小文字を満たす必要があります.例えばIDCode、idCodeは合法的です.なるべく小文字で書いてください.
」コンストラクタを通して注入します.
<!--      :type -->
<bean id="car1" class="com.baobaotao.ditype.Car">
	<constructor-arg type="java.lang.String">
		<value>  CA72</value>
	</constructor-arg>
	<constructor-arg type="double">
		<value>20000</value>
	</constructor-arg>
</bean>
<!--      :type&index,     -->
<bean id="car3" class="com.baobaotao.ditype.Car">
	<constructor-arg index="0" type="java.lang.String">
		<value>  CA72</value>
	</constructor-arg>
	<constructor-arg index="1" type="java.lang.String">
		<value>    </value>
	</constructor-arg>
	<constructor-arg index="2" type="int">
		<value>200</value>
	</constructor-arg>
</bean>
循環依存問題:2つのBeanがいずれも構造関数を通して注入され、相互に構造関数から相互参照されると、デッドロックが発生します.この場合は、構造関数注入法を変更し、属性入力に変更するしかありません.
注入パラメータ詳細:
基本的なデータの種類とそのパッケージ類、Stringなどは、文字面の値を注入することができます.すなわち、「value」の要素です.Spring容器は内部で文字面の値のエディタを提供しています.文字列で表される文字面の値を内部変数の対応するタイプに変換することができます.springは、他のタイプの属性注入時の変換作業を処理するためにユーザがカスタムエディタを登録することを許可します.
<bean id="car" class="com.baobaotao.attr.Car" lazy-init="default">
	<property name="brand">
		<value>
			<![CDATA[  &CA72]]>
		</value>
	</property>
	<property name="maxSpeed">
		<value>200</value>
	</property>
	<property name="price" value="2000.00" />
</bean>
あのbrand属性の字面は見ましたか?それは特殊なXML記号です.[CDATA[...]]の役割は、中のものを普通のテキストとして解析しないように解析することですが、これはの要素の中でしか使えません.直接的に簡略化されたものであれば、現在の最もエレガントな配置はp名前空間を使用しています.
<bean id="boss2" class="com.baobaotao.fb.Boss"
       p:name="John" p:car-ref="car2"/>
lookupメソッド注入(CGib実現):
適用シーンは、一つのsingleton Beanを通じて一つのprototype Beanを取得したい場合、呼び出し方法によって取得したオブジェクトは毎回違っています.
public interface MagicBoss {
    Car getCar();
}
 
<bean id="car" class="com.baobaotao.auto.Car" scope="singleton">
    <property name="brand" value="  CA72"/>
    <property name="price" value="2000"/>
</bean> 
<bean id="magicBoss" class="com.baobaotao.auto.MagicBoss">
    <lookup-method name="getCar" bean="car"/>
</bean>
』注釈に基づく設定:
@Component、@Repository(DAO)、@Service、@ControllerにPOJO類を表示し、その後springプロファイルにcontext名前空間を導入し、pomに対するjarパケット依存を導入してスキャンを開始する:
<context:component-scan base-package="com.springzoo.anno"/>
<context:component-scan base-package="com.springzoo" resource-pattern="anno/*.class"/ >
<context:component-scan base-package="com.springzoo">
       <context:include-filter type="regex" expression="com\.springzoo\.anno.*Dao"/>
       <context:include-filter type="regex" expression="com\.springzoo\.anno.*Service"/>
       <context:exclude-filter type="aspectj" expression="com.springzoo..*Controller+"/>
   </context:component-scan>
これらすべてのフィルタリングは、aspectjのフィルタ表現能力が最も強く、他のタイプで表現できるフィルタルールを簡単に実現することができます.
」@Autowiredを使って自動注入を行います.
package com.baobaotao.anno;
 
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
 
@Service
public class LogonService implements BeanNameAware{
    @Autowired(required=false)
    private LogDao logDao;
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao;
}
一般原則:XML構成DataSource、Session Factoryなどの資源Beanを採用し、XMLにおいてaop、context名前空間を利用して関連テーマの配置を行う.他の全ての項目の中開発Benは、注釈構成に基づいて配置されている.即ち、プロジェクト全体は「XMLベース+注釈ベース」の配置方式を採用しており、Java類による配置は少ない.
 
本人のブログは引っ越しました.新しい住所はhttp://yidao620c.github.io/です.