Springまとめ——逆転制御、注入(配置と注釈の2つの方式)

8493 ワード

一、スプリングの容器:
1.制御反転とは、従来の方法では、あるjavaオブジェクトAがオブジェクトBを呼び出す必要がある場合、newキーワードによってオブジェクトBを作成する(クラスA依存系Bとも言える)が、Springではspringで作成されたので、制御反転が行われた.クラス情報の変更が必要な場合は、Springのプロファイルを変更すればいいです.Springを使って新しいオブジェクトを作成する目的は、クラスとクラスの結合度を下げることです.
2.容器:
Spring容器はSpringの核心です.
実際には、spring容器を例証すると、コンテナは自動的にすべてのBeaビンのインスタンスを初期化し、その後、あるオブジェクトのインスタンスをgetBen()方法で取得する.
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); //     Spring  ,

Boss boss = (Boss) ac.getBean("boss"); //    boss
二、手動注入:
1.setterメソッド注入.フォーマット:
<bean id=" " class=" ">

    <property name=" " value=" " />

    <property name=" " value=" " />

</bean>
例:
 
    <bean id="boss" class="wang.spring.Boss">

        <property name="car" ref="car"/>

        <property name="office" ref="office" />

    </bean>

    <bean id="office" class="wang.spring.Office">

        <property name="officeNo" value="002"/>

    </bean>

    <bean id="car" class="wang.spring.Car" scope="singleton">

        <property name="brand" value="    CA72"/>

        <property name="price" value="2000"/>

    </bean>
 
2.コンストラクタ注入:参のコンストラクタが書かれている必要があります.index=「0」は構造関数の最初のパラメータを表します.
<bean id="car" class="wang.spring.Car ">

  <constructor-arg  index=" 0" type=“int” value=" 001” />

  <constructor-arg  index=" 1" type=“String” value=" baoma” />

</bean>
上のコードを利用して、インスタンスcarを新規に作成し、その属性に値を割り当てることができます.
三、依存注入:現在のクラスAはクラスBのオブジェクトインスタンスを使用する必要があります.クラスBのコンストラクタnew B()を通過すると、クラスA依存クラスBとなります.(つまり、現在のクラスは他のクラスのオブジェクトを参照します)
<property name=“”ref=“”> または class=”……”> <property name=”属性1” value=”……”/> </bean> <bean id=”bean2” class=”……”> <property name=”bean1” ref=”bean1”/> </bean> </beans>  
四、集合の注入:
セットインジェクション:
<bean id=”……” class=”……”>  

    <set>  

        <value>value1</value>  

        <value>value2</value>  

              ……  

     </set>  

</bean>
Lsit集合注入:
<bean id=”……” class=”……”>  

   <list>  

        <value>value1</value>  

        <value>value2</value>  

              ……  

    </list>  

</bean>
Map集合注入:
<bean id=”……” class=”……”>  

    <map>  

        <entry key=”key1” value=”value1”>  

        <entry key=”key2” value=”value2”>  

              ……  

    </map>  

</bean>         
 
五、自動注入:分配置ファイルの自動注入と注釈自動注入
A:プロファイルの自動注入
bean内の属性atowireによって自動的にインスタンスを注入することができます.
自動組立は使用しません.これはデフォルトの設定です.
byName:属性自動組立により、BenFactoryは容器中の全てのBeanを検索し、id属性と属性名の同名のBeanを探し出して注入を完了します.整合したビーンが見つからないとSpringは注入されない.
byType:属性タイプによって自動的に組み立てられます.BenFactroyは容器の中の全てのBeanを探しています.属性に依存するタイプと同じBeanがあれば、自動的にこの属性を注入します.
このようなビームが複数あると異常を投げます.このようなビーンがないと何も発生しません.属性は設定されません.
<beans>

    <bean class="dao.OrderDaoImpl" autowire="byName"></bean>

    <bean class="dao.ItemDaoImpl"></bean>

    <bean id="storeService" class="service.StoreServiceImpl"></bean>    

</beans>
B:注解自動注入
注解は大きく二つの種類に分けられます.JSR-250は注釈方式とSpring自身の注釈方式を規範化しています.
注釈によって組み立てる時は、構成ファイルにbeanを追加しなければなりません.これは実は注釈を解析するための注解プロセッサです.
JSR-250仕様の注釈方式のプロセッサ:
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>
Springが持参する注釈方式のプロセッサ:
<bean class="org.sprinframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor"/>
もちろん、より便利な方法があります.両方の注釈方式は下記の方法で隠し登録してもいいです.
<context:annotation-config>  
 
1.JSR-250規範の注釈方式:
@Resource
デフォルトでは名前によってマッチしますが、2つの属性があります.nameとtype.自動マッチングの種類はそれぞれ指定できます.
メンバー変数、setterメソッド、コンストラクションに表示してもいいです.
public class Boss {

    //         Car   Bean

    @Resource

    private Car car;



    //      bean     office   Bean

    @Resource(name = "office")

    private Office office;

}
2.Springの持ち込み方法:
@Autowired
タイプ別にマッチ(byType)
メンバー変数、setterメソッド、コンストラクションに表示してもいいです.
この注釈はタイプ別に注入されているので、同じタイプのオブジェクトが複数あると異常が発生します.この時私たちは@Qualfierで対象の名前を指定できます.両方を組み合わせて使うと、一つの対象を確定できます.
public class Boss {

 

    @Autowired

    @Qualifier("office")

    private Office office;

    //          ,    setter  …

} 
@Qualifier          、    、      。           ,   Spring    @Autowired  @Qualifier         。(@Qualifier    @Autowired  ,      ) 
注意:よくある誤植は、この時に注解で自動注入する時にはファイルを配置しなくてもいいです.これは間違いです.この時のプロファイルは、beanを定義するために使用されます.設定ファイルを削除するには、以下のゼロの構成を見て、注釈によって定義されたbeanを置換する必要があります.
<beans>

    <bean class="dao.OrderDaoImpl"></bean>

    <bean class="dao.ItemDaoImpl"></bean>

    <bean id="storeService" class="service.StoreServiceImpl"></bean>    

</beans>
六、ゼロ設定を実現する:
上の二つの注釈方式により、beanに自動注入が可能です.ただし、beanはxmlファイルで<bean>で定義されています.私たちも注解でbeanを定義して、ゼロ配置を実現できますか?答えは肯定的です.
Springは次のいくつかのAnnotationを提供してSpring Beanを表示します.
@Component普通のSpring Beanを表示します.
@Controller:コントローラのコンポーネント類を表示します.
@Service:業務ロジックコンポーネント類を表示する;
@Repository:Daoコンポーネントを表示します.
現在のComponentは各階で通用します.
@Component

public class Boss {

    @Autowired

    private Car car;



    @Autowired

    private Office office;

    …

}
この場合、bean.xmlファイルでbeanを定義する必要はありません.これらの種類のカバンを指定するために、行を追加します. 
<context:component-scan base-package="com.baobaotao"/>