相同:
Spring提供了兩種不同的IOC 容器,一個是BeanFactory,另外一個是ApplicationContext,它們都是Java interface,ApplicationContext繼承於BeanFactory(ApplicationContext繼承ListableBeanFactory。它們都可以用來配置XML屬性,也支援屬性的自動注入。而ListableBeanFactory繼承BeanFactory),BeanFactory 和 ApplicationContext 都提供了一種方式,使用getBean("bean name")獲取bean。BeanFactory 獲取bean註冊資訊
public class HelloWorldApp{ public static void main(String[] args) { XmlBeanFactory factory = new XmlBeanFactory (new ClassPathResource("beans.xml")); HelloWorld obj = (HelloWorld) factory.getBean("helloWorld"); obj.getMessage(); }}
ApplicationContext 獲取bean註冊資訊
public class HelloWorldApp{ public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); HelloWorld obj = (HelloWorld) context.getBean("helloWorld"); obj.getMessage(); }}
但是他們在工作和特性上有一些不同:
當你呼叫getBean()方法時,BeanFactory僅例項化bean,而ApplicationContext 在啟動容器的時候例項化單例bean,不會等待呼叫getBean()方法時再例項化。BeanFactory不支援國際化,即i18n,但ApplicationContext提供了對它的支援。BeanFactory與ApplicationContext之間的另一個區別是能夠將事件釋出到註冊為監聽器的bean。BeanFactory 的一個核心實現是XMLBeanFactory 而ApplicationContext 的一個核心實現是ClassPathXmlApplicationContext,Web容器的環境我們使用WebApplicationContext並且增加了getServletContext 方法。如果使用自動注入並使用BeanFactory,則需要使用API註冊AutoWiredBeanPostProcessor,如果使用ApplicationContext,則可以使用XML進行配置。簡而言之,BeanFactory提供基本的IOC和DI功能,而ApplicationContext提供高階功能,BeanFactory可用於測試和非生產使用,但ApplicationContext是功能更豐富的容器實現,應該優於BeanFactory
最新評論