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方式依赖注入
构造器方式依赖注入