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://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于The IoC container的详细内容...