3.The IoC container(2)

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/beans.html#beans-factory-nature

4.6.1 Lifecycle callbacks

4.6.1.1 Initialization callbacks

The org.springframework.beans.factory.InitializingBean interface allows a bean to perform initialization work after all necessary properties on the bean have been set by the container.接口InitializingBean只有一个方法

1 void afterPropertiesSet() throws Exception;

然而,更推荐用XML-based configuration metadata去配置,For example:

<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
//////////////////////推荐////////////////////////////////////

public class ExampleBean {

  public void init() {
      // do some initialization work
  }
}

//==========等同于:======
<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>

public class AnotherExampleBean implements InitializingBean {

  public void afterPropertiesSet() {
      // do some initialization work
  }
}

同样,Implementing the org.springframework.beans.factory.DisposableBean interface allows a bean to get a callback when the container containing it is destroyed. The DisposableBean interface specifies 只有一个方法:

1 void destroy() throws Exception;

推荐:

<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>

public class ExampleBean {

  public void cleanup() {
      // do some destruction work (like releasing pooled connections)
  }
}

//============等同于========
<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>

public class AnotherExampleBean implements DisposableBean {

  public void destroy() {
      // do some destruction work (like releasing pooled connections)
  }
}

4.7 Bean definition inheritance(继承)

 1 <bean id="inheritedTestBean" abstract="true"
 2     class="org.springframework.beans.TestBean">
 3   <property name="name" value="parent"/>
 4   <property name="age" value="1"/>
 5 </bean>
 6 
 7 <bean id="inheritsWithDifferentClass"
 8       class="org.springframework.beans.DerivedTestBean"
 9       parent="inheritedTestBean" init-method="initialize">
10 
11   <property name="name" value="override"/>
12   <!-- the age property value of 1 will be inherited from  parent -->
13 
14 </bean>

4.8.1.1 Example: Hello World, BeanPostProcessor-style

 1 package scripting;
 2 
 3 import org.springframework.beans.factory.config.BeanPostProcessor;
 4 import org.springframework.beans.BeansException;
 5 
 6 public class InstantiationTracingBeanPostProcessor implements BeanPostProcessor {
 7 
 8   // simply return the instantiated bean as-is
 9   public Object postProcessBeforeInitialization(Object bean, String beanName)
10                                                                      throws BeansException {
11       return bean; // we could potentially return any object reference here...
12   }
13 
14   public Object postProcessAfterInitialization(Object bean, String beanName)
15                                                                      throws BeansException {
16       System.out.println("Bean '" + beanName + "' created : " + bean.toString());
17       return bean;
18   }
19 }
20 
21 <?xml version="1.0" encoding="UTF-8"?>
22 <beans xmlns="http://www.springframework.org/schema/beans"
23      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
24      xmlns:lang="http://www.springframework.org/schema/lang"
25      xsi:schemaLocation="http://www.springframework.org/schema/beans
26          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
27          http://www.springframework.org/schema/lang
28          http://www.springframework.org/schema/lang/spring-lang-3.0.xsd">
29 
30   <lang:groovy id="messenger"
31         script-source="classpath:org/springframework/scripting/groovy/Messenger.groovy">
32       <lang:property name="message" value="Fiona Apple Is Just So Dreamy."/>
33   </lang:groovy>
34 
35   <!--
36       when the above bean (messenger) is instantiated, this custom
37       BeanPostProcessor implementation will output the fact to the system console
38    -->
39   <bean class="scripting.InstantiationTracingBeanPostProcessor"/>
40 
41 </beans>
42 ///////////////////////////////////
43 import org.springframework.context.ApplicationContext;
44 import org.springframework.context.support.ClassPathXmlApplicationContext;
45 import org.springframework.scripting.Messenger;
46 
47 public final class Boot {
48 
49   public static void main(final String[] args) throws Exception {
50       ApplicationContext ctx = new ClassPathXmlApplicationContext("scripting/beans.xml");
51       Messenger messenger = (Messenger) ctx.getBean("messenger");
52       System.out.println(messenger);
53   }
54 }
55 
56 //The output of the preceding application resembles the following:
57 
58 Bean 'messenger' created : org.springframework.scripting.groovy.GroovyMessenger@272961
59 org.springframework.scripting.groovy.GroovyMessenger@272961

4.8.1.2 Example: The PropertyPlaceholderConfigurer

 1 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 2   <property name="locations" value="classpath:com/foo/jdbc.properties"/>
 3 </bean>
 4 
 5 <bean id="dataSource" destroy-method="close"
 6     class="org.apache.commons.dbcp.BasicDataSource">
 7   <property name="driverClassName" value="${jdbc.driverClassName}"/>
 8   <property name="url" value="${jdbc.url}"/>
 9   <property name="username" value="${jdbc.username}"/>
10   <property name="password" value="${jdbc.password}"/>
11 </bean>
12 
13 classpath:com/foo/jdbc.properties
14 jdbc.driverClassName=org.hsqldb.jdbcDriver
15 jdbc.url=jdbc:hsqldb:hsql://production:9002
16 jdbc.username=sa
17 jdbc.password=root

从Spring 2.5开始,it is possible to configure property placeholders with a dedicated configuration element. 多个地址用逗号分隔。

1 <context:property-placeholder location="classpath:com/foo/jdbc.properties"/>

 

 

posted @ 2012-11-09 15:01  siyed  Views(207)  Comments(0Edit  收藏  举报