spring實例化bean的方式


1.使用類構造器實現實例化(bean的自身構造器)

 1 <bean id = "orderService" class="cn.itcast.OrderServiceBean"/> 

2.使用靜態工廠方法實現實例化

1 <bean id = "personService" class = "cn.itcast.OrderFactory" factory-method     = "createOrder"/>
2 public class OrderFactory{
3     private static OrderFactory orderFactory = new OrderFactory();
4     private OrderFactory();
5     public static OrderFactory createOrder(){
6          return OrderFactory;   
7     }  
8 }

3.使用實例化工廠方法實現實例化(通過別的實體的bean)

 1 <bean id = "personServiceFactory" class = "cn.itcast.service.OrderFactory"/>
 2 <bean id = "persionService" factory-bean = "personServiceFactory" foctory-method = "createOrder"/>
 3 public class OrderFactory{
 4     private static OrderService orderService = new OrderService();
 5     private OrderFactory();
 6     public static OrderService createOrderServiceBean{
 7         return OrderService;
 8     }
 9         
10 }

 

  我們通常把負責加載bean的BeanFactory或者ApplicationContext叫做Spring容器。兩者都是通過xml配置文件加載bean,ApplicationContext和BeanFacotry相比,主要區別在於BeanFacotry是延遲加載,在調用getBean()的時候才實例化要get的bean。如果Bean的某一個屬性無法注入,這時候才會拋出異常;而ApplicationContext默認,在初始化自身的時候就會對所有的bean做實例化,除非對bean設置lazy-init="true",這樣有利於檢查所依賴屬性是否能注入。

  另外,ApplicationContext提供了更多的擴展功能,如對要加載的資源文件的國際化’處理,對BeanPostProcessor的處理,所以在J2EE應用中,通常情況下我們都選擇使用ApplicationContext。不管是使用BeanFactory還是ApplicationContext,Spring 默認以singleton的方式初始化bean.

  對於BeanFactory的初始化,通常用下面的代碼:

1 ClassPathResource resource = new ClassPathResource("beans.xml");
2 BeanFactory factory = new XmlBeanFactory(resource);

  對於ApplicationContext的初始化,通常在web.xml中配置:

1 <context-param>    
2         <param-name>contextConfigLocation</param-name>
3         <param-value>
4             classpath:conf/Appcontext.xml
5         </param-value>
6 </context-param>
7 <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

  或者

ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"applicationContext.xml", "applicationContext-part2.xml"});

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM