好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

The IoC container

The IoC container

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html

The  ApplicationContext  is the interface for an advanced factory capable of maintaining a registry of different beans and their dependencies. Using the method  T  getBean (Stringname, Class<T> requiredType)  you can retrieve instances of your beans.

The  ApplicationContext  enables you to read bean definitions and access them as follows:

 1   //   create and configure beans 
 2  ApplicationContext context =
 3       new  ClassPathXmlApplicationContext( new  String[] {"services.xml", "daos.xml" });
  4  
 5   //   retrieve configured instance 
 6  PetStoreServiceImpl service = context.getBean("petStore", PetStoreServiceImpl. class  );
  7  
 8   //   use configured instance 
 9  List userList service.getUsernameList();

接口ApplicationContext中还有其它的方法来取回beans实例, 但是理想的情况是你的应用应该不使用它们。 从而使应用不dependency on Spring APIs。For example, Spring's integration with web frameworks provides for dependency injection for various web framework classes such as controllers and JSF-managed beans.

3.3.2.2 Instantiation with a static factory method

  1  <bean id="clientService"
  2         class ="examples.ClientService"
  3        factory-method="createInstance"/>
  4  
  5   public   class   ClientService {
   6     private   static  ClientService clientService =  new   ClientService();
   7     private   ClientService() {}
   8  
  9     public   static   ClientService createInstance() {
  10       return   clientService;
  11     }
  12  }

3.3.2.3 Instantiation using an instance factory method

  1  <!-- the factory bean, which contains a method called createInstance() -->
  2  <bean id="serviceLocator"  class ="examples.DefaultServiceLocator">
  3    <!-- inject any dependencies required by  this  locator bean -->
  4  </bean>
  5  
  6  <!-- the bean to be created via the factory bean -->
  7  <bean id="clientService"
  8        factory-bean="serviceLocator"
  9        factory-method="createClientServiceInstance"/>
 10  
 11   public   class   DefaultServiceLocator {
  12     private   static  ClientService clientService =  new   ClientServiceImpl();
  13     private   DefaultServiceLocator() {}
  14  
 15     public   ClientService createClientServiceInstance() {
  16       return   clientService;
  17     }
  18  }

Dependency injection  (DI)的两种方法: Constructor-based dependency injection  and  Setter-based dependency injection .

3.4.1.1 Constructor-based dependency injection

  1   package   x.y;
   2  
  3   public   class   Foo {
   4  
  5     public   Foo(Bar bar, Baz baz) {
   6         //   ... 
  7     }
   8   }
   9  
 10  <beans>
 11    <bean id="foo"  class ="x.y.Foo">
 12        <constructor-arg ref="bar"/>
 13        <constructor-arg ref="baz"/>
 14    </bean>
 15  
 16    <bean id="bar"  class ="x.y.Bar"/>
 17    <bean id="baz"  class ="x.y.Baz"/>
 18  
 19  </beans>
 20  
 21   //////////////////////////////////////////////////////////////////
  22   package   examples;
  23  
 24   public   class   ExampleBean {
  25  
 26     //   No. of years to the calculate the Ultimate Answer 
 27     private   int   years;
  28  
 29     //   The Answer to Life, the Universe, and Everything 
 30     private   String ultimateAnswer;
  31  
 32     public  ExampleBean( int   years, String ultimateAnswer) {
  33         this .years =  years;
  34         this .ultimateAnswer =  ultimateAnswer;
  35     }
  36   }
  37  
 38  <bean id="exampleBean"  class ="examples.ExampleBean">
 39  <constructor-arg type="int" value="7500000"/>
 40  <constructor-arg type="java.lang.String" value="42"/>
 41  </bean>
 42  
 43  <bean id="exampleBean"  class ="examples.ExampleBean">
 44  <constructor-arg index="0" value="7500000"/>
 45  <constructor-arg index="1" value="42"/>
 46  </bean>
 47  
 48  <bean id="exampleBean"  class ="examples.ExampleBean">
 49  <constructor-arg name="years" value="7500000"/>
 50  <constructor-arg name="ultimateanswer" value="42"/>
 51  </bean>
 52  
 53   package   examples;
  54  
 55   public   class   ExampleBean {
  56  
 57     //   Fields omitted 
 58  
 59    @ConstructorProperties({"years", "ultimateAnswer" })
  60     public  ExampleBean( int   years, String ultimateAnswer) {
  61         this .years =  years;
  62         this .ultimateAnswer =  ultimateAnswer;
  63     }
  64  }

3.4.1.2 Setter-based dependency injection

Spring容器验证每个bean的配置当容器被创建的时候。然而bean的属性只有bean创建时才被设置。

只有被设置为 singleton-scoped 并且 pre-instantiated  (默认)的bean才在 容器被创建时被创建 。否则bean直到被请求时才被创建。

Creation of a bean potentially causes a graph of beans to be created, as the bean's dependencies and its dependencies' dependencies (and so on) are created and assigned.

< bean   id = "lazy"   class = "com.foo.ExpensiveToCreateBean"    lazy-init = "true"  />

 1  < beans default-lazy-init =" true ">
 2    <!--  no beans will be pre-instantiated...  -->
 3  </ beans >

 

 










 

 

标签:  spring ,  ioc

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于The IoC container的详细内容...

  阅读:38次