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的详细内容...