非springホストオブジェクトはどのようにspringホストオブジェクトを取得しますか?

3150 ワード

非springホストオブジェクトは、主にApplication Contextの取得に向けてspringホストオブジェクトを取得する必要があります.
 
全部で以下の4つの方法に分けられます.
一、springプロファイルでaplication Contact.xml初期化
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class SpringUtil{
	private static ApplicationContext applicationContext = null;
	
	public static ApplicationContext getApplicationContext() {
		if(applicationContext == null){
			applicationContext = new FileSystemXmlApplicationContext("applicationContext.xml");
		}
		return applicationContext;
	}
}
もちろんこの中のappication Contect.xmlは全ファイルのパスです.これもこのような方式があまり柔軟ではない理由の一つです.
もう一つは、このようにして、システムは2つのアプレックスオブジェクトを保存している(静的なタイプでないと、この方法を呼び出すたびにnewが一つのオブジェクトになり、効率が悪くなるはずだ).
二、スプリングツール類で取得する
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class SpringUtil{
	private static ApplicationContext applicationContext = null;
	
	public ApplicationContext getApplicationContext(){
		if(applicationContext == null){
			applicationContext = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
		}
		return applicationContext;
	}
}
ここではServletContextはどうやって取得するか分かりませんので、この方法は使いません.
ツールクラスの取得に失敗した場合、nullに戻ります.
applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
この方法を使ってもいいです.ツール類は失敗時報の異常を取得します. 
三、抽象類を継承することによって、appection Object Support
public class SpringUtil extends ApplicationObjectSupport {
	private ApplicationContext applicationContext = super.getApplicationContext();
	
	public ApplicationContext getAC(){
		return applicationContext;
	}
}
Application Object Supportでget/setApple Comptextはすべてfinalタイプです.
四、Application Contect Awareインターフェースを実現することによって
spring初期化の際に、このインターフェースで実現されるsetApple Comptext方法でApplication Comptextオブジェクトをこのクラスに注入します.具体的には以下の通りです.
 
私の解決方法の4番目の選択:
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SpringUtil implements ApplicationContextAware {

	private static ApplicationContext applicationContext;

	public static ApplicationContext getApplicationContext() {
		return applicationContext;
	}

	public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
		SpringUtil.applicationContext = applicationContext;
	}
}
設定ファイル:



 
	
最後に、このクラスのプロファイルをappication Contact.xmlに追加します.
 
springによって管理されているすべてのオブジェクトを以下の方法で取得することができます.
private InfoBO infoBOProxy = (InfoBO) SpringUtil.getApplicationContext().getBean("infoBOProxy");
スプリングについての理解は浅いです.何か間違いがあったら、教えてください.
転載先:https://www.cnblogs.com/sean-zou/archive/2012/08/08/3710119.html