控制反转 Inversion of Control

Spring 控制反转容器的使用

通过构造器创建一个 bean 实例

<!-- spring-config.xml -->
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean name="product" class="app15a.bean.Product" />  <!-- 注意应采用 id 或者 name 属性标识一个 bean -->
    
</beans>

该 bean 的定义告诉 Spring 通过默认的无参构造器来初始化 Product 类,如果不存在无参构造器,则 Spring 将抛出一个异常。

为了让 Spring 创建一个 Product 实例,应将 bean 定义的 name 值(或者 id 值)和 Product 类型作为参数传递给 ApplicationContext 的 getBean 方法:

ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring-config.xml"});  // 导入配置文件 
Product product1 = context.getBean("product", Product.class);  // 让 Spring 创建一个 Product 实例  
product1.setName("Excellent snake oil");  // 给 product 的 name 属性赋值 
System.out.println("product1: " + product1.getName());  // 获取 product 的 name 属性

通过工厂方法创建一个 bean 实例

<!-- spring-config.xml -->
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="calendar" class="java.util.Calendar" factory-method="getInstance" />  
</beans>
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring-config.xml"});  // 导入配置文件 
Product product1 = context.getBean("calendar", Calendar.class);  // 让 Spring 创建一个 Calendar 实例  

Destroy Method 的使用

 可以在 bean 定义中配置 destroy-method 属性,用来指定在销毁前要被执行的方法。

在该例子中,配置 Spring 通过 java.util.concurrent.Executors 的静态方法 newCachedThreadPool 创建一个 java.util.concurrent.ExecutorService 实例,并指定了 destroy-method 属性值为 shutdown 方法,这样,Spring 会在销毁 ExecutorService 实例前调用其 shutdown 方法。

<!-- spring-config.xml -->
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="executorService" class="java.util.concurrent.Executors" factory-method="newCachedThreadPool" destroy-method="shutdown" />  
</beans>

向构造器传递参数

setter方式依赖注入

构造器方式依赖注入

猜你喜欢

转载自www.cnblogs.com/0820LL/p/9943926.html
今日推荐