04 IOC昇格

3570 ワード

Beanその他の高度な構成Beanの役割ドメインscope 1)singleton(単例デフォルト)
テストクラス@Test public void test 1(){
   ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml");
   SimplePropertyDemo spd=(SimplePropertyDemo) ctx.getBean("simplePropertyDemo1");

System.out.println(spd); SimplePropertyDemo spd2=(SimplePropertyDemo) ctx.getBean("simplePropertyDemo1"); System.out.println(spd2); }
印刷結果com.neuedu.spring.chap02.SimplePropertyDemo@42eca56e com.neuedu.spring.chap02.SimplePropertyDemo@42eca56e
2)prototype(複数例)ステータスbeanがある場合(毎回新しいbeanを作成する必要がある場合)も同様に上の例ですが、bean定義にscope="prototype"(複数例)を加えると印刷結果は以下のcomになります.neuedu.spring.chap02.SimplePropertyDemo@42eca56e com.neuedu.spring.chap02.SimplePropertyDemo@192d3247
3)request(web有効)4)session(web有効)5)global session(porletでは一般的ではない)beanの遅延ロード(怠惰ロード)ApplicationContextが実現するデフォルトの動作は、起動時にすべてのsingleton beanを事前にインスタンス化(すなわち依存注入)することである:1)scope="singleton"デフォルト時に起動時にロードする2)scope="prototype"が遅延ロードである3)scope="singleton"そしてlazy-init="true"怠け者のロードもデフォルトfalseで、起動時にロードされるはずです.lazy-init=「true」が怠惰にロードされると.getBeanを呼び出したときにbeanの継承(理解)をロードする単純なインスタンス
複数のプロファイル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-4.3.xsd"> ......
注記ベースの構成step 1:xmlヘッダ記述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-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
Step 2:dao,serviceインタフェースと実装クラスpublic interface IPowerDao{public void del(int id);}
@Repository("powerDao") public class PowerDaoImpl implements IPowerDao {
@Override
public void del(int id) {
    System.out.println("del power");

}

}
public interface IPowerService { public void del(int id); }
@Service("powerServie") public class PowerServieImpl implements IPowerService { @Autowired IPowerDao powerDao; @Override public void del(int id) { System.out.println("del service"); powerDao.del(id); } public void setPowerDao(IPowerDao powerDao) { this.powerDao = powerDao; }
}
Step 3書き込みテストクラスpublic class ScanTest{@Test public void test 1(){ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml");IPowerService=(IPowerService)ctx.getBean("powerService");service.del(1);}
@Qualifier 1つのインタフェースに複数の実装クラスがある場合、どの名前の実装クラス@Autowired@Qualifier("userDaoImpl")public IUserDao userDaoを@Qualifierで明確に参照する必要があります.
注意:サービスにパラメトリック構造(パラメトリック構造が欠けている)と属性setメソッドがある場合、@Qualifierは構造メソッドの異常を提示します.解決方法は2つある:1)パラメトリック構造を削除しsetメソッドのみを保持する2)パラメトリック構造を増加する

注釈ベースの構成


環境を構築する際に@Controllerコンビネーション注記(@Component注記を組み合わせた)を試したことがあります.MVCレイヤ(制御レイヤ)に適用すると、DispatcherServiceletはこの注記のクラスを自動的にスキャンし、webリクエストを@RequestMappingのメソッドにマッピングします.@Serviceコンポジット注記(@Component注記を組み合わせた)は、サービス層(ビジネスロジック層)@Repositoryコンポジット注記(@Component注記を組み合わせた)に適用され、dao層(データアクセス層)@Componentに適用されるコメント付きクラスが「コンポーネント」であり、Spring管理のBeanとなる.注記ベースの構成とクラスパススキャンを使用すると、これらのクラスは自動検出の候補とみなされます.同時に@Componentはメタ注釈です.@Autowired Springが提供するツール(Springの依存注入ツール(BeanPostProcessor、BeanFactoryPostProcessor)によって自動的に注入されます.)