spring容器をbeanに取得させる
2724 ワード
場合によっては、容器中のBeanはspring容器自体に自主的にアクセスする必要があるかもしれません.Springもこの需要のために準備しました.
BenFactoryAwareインターフェースを実現するBeanは、BenFactory容器を訪問する能力を持ち、BenFactoryAwareインターフェースを実現するBeanインスタンスがコンテナによって作成された後、BenFactoryの引用を持つ.BenFactory Awareは次のような方法しかない.
setBenFactory(BenFactory BeanFactory):この方法は、そのBenFactoryを作成することを指すパラメータを有する.注:変更方法はシステムのアクティブな呼び出しです.呼び出しを表示する必要はありません.
ほとんどの初心者はこのsetter方法を見て、ちょっとおかしいと思います.これは以前に私達がsetter方法を定義した時に、この方法は通常プログラマによって呼び出されます.setterパラメータはプログラマによって指定されます.spring依存注入を使用しても、Setterメソッドのパラメータはプロファイルで指定されていますが、ここでのこのsetter方法はおかしいです.この方法はspringからアクティブに呼び出され、spring容器をパラメータとしてこの方法に導入します.このインターフェースと似ているのはBeanNameAware、Resource Loader Awareインターフェースであり、これらのインターフェースはいずれも同様のsetter方法を提供しており、これらの方法もspringによって呼び出される.
BeanFactoryAwareインターフェースと似ているのは、Application ContactextAwareインターフェースであり、このインターフェースを実現するBeanはこの方法を実現する必要があります.
setApplication Contect(Application Comptext)この方法は同様にspring自動起動があります.この方法は、スプリング容器が呼び出されると、自身をパラメータとしてこの方法に伝えられます.
このビーンをxmlファイルに設定します.
BenFactoryAwareインターフェースを実現するBeanは、BenFactory容器を訪問する能力を持ち、BenFactoryAwareインターフェースを実現するBeanインスタンスがコンテナによって作成された後、BenFactoryの引用を持つ.BenFactory Awareは次のような方法しかない.
setBenFactory(BenFactory BeanFactory):この方法は、そのBenFactoryを作成することを指すパラメータを有する.注:変更方法はシステムのアクティブな呼び出しです.呼び出しを表示する必要はありません.
ほとんどの初心者はこのsetter方法を見て、ちょっとおかしいと思います.これは以前に私達がsetter方法を定義した時に、この方法は通常プログラマによって呼び出されます.setterパラメータはプログラマによって指定されます.spring依存注入を使用しても、Setterメソッドのパラメータはプロファイルで指定されていますが、ここでのこのsetter方法はおかしいです.この方法はspringからアクティブに呼び出され、spring容器をパラメータとしてこの方法に導入します.このインターフェースと似ているのはBeanNameAware、Resource Loader Awareインターフェースであり、これらのインターフェースはいずれも同様のsetter方法を提供しており、これらの方法もspringによって呼び出される.
BeanFactoryAwareインターフェースと似ているのは、Application ContactextAwareインターフェースであり、このインターフェースを実現するBeanはこの方法を実現する必要があります.
setApplication Contect(Application Comptext)この方法は同様にspring自動起動があります.この方法は、スプリング容器が呼び出されると、自身をパラメータとしてこの方法に伝えられます.
public class myApplicationContext implements ApplicationContextAware{
private ApplicationContext applicationContext;
public ApplicationContext getApplicationContext() {
return applicationContext;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
System.out.println(" !!");
this.applicationContext = applicationContext;
}
}
myAppleicationControtextAwareインターフェースを実現し、このインターフェースが提供する方法を実現し、これにより、Beanインスタンスが直接にそのspring容器にアクセスできるようになる.このビーンをxmlファイルに設定します.
は簡単なテストを行います.public class TestClass {
@Test
public void testHelloimple2() throws IOException {
ApplicationContext act= new ClassPathXmlApplicationContext(url);
System.out.println("=======================================");
myApplicationContext mact=act.getBean("myapplicationcontext",myApplicationContext.class);
System.out.println(mact.getApplicationContext());
System.out.println(act);
System.out.println(act==mact.getApplicationContext());
}
}
出力: !!
=======================================
org.springframework.context.support.ClassPathXmlApplicationContext@5ecddf8f: startup date [Tue Mar 17 16:56:46 CST 2015]; root of context hierarchy
org.springframework.context.support.ClassPathXmlApplicationContext@5ecddf8f: startup date [Tue Mar 17 16:56:46 CST 2015]; root of context hierarchy
true
Aplication Contect Awareインターフェースを実現してビーンに容器を訪問する能力を持たせましたが、コードを汚染して、コードとspringインターフェースが結合しています.したがって、特に必要でない場合は、直接容器にアクセスしないことをお勧めします.