IOC初始化銷燬的2種實現方式
阿新 • • 發佈:2018-12-10
IOC初始化銷燬的2種實現方式
1、bean內呼叫init-method 和destroy-method
2、通過註解實現@PostConstruct 和@PreDestroy
-----------------------------bean內呼叫init-method 和destroy-method------------------------
1、建立IOrderDao
package com.longteng.lesson2.dao; public interface IOrderDao { public String bookOrder(String name); }
2、建立IOrderDao的實體 OrderDao
package com.longteng.lesson2.dao.impl; import com.longteng.lesson2.dao.IOrderDao; public class OrderDao implements IOrderDao { @Override public String bookOrder(String name) { return name+"預訂了訂單"; } }
3、建立OrderService
package com.longteng.lesson2.service;
import com.longteng.lesson2.dao.IOrderDao;
public class OrderService {
private String orderSkuName;
public OrderService(String orderSkuName){
this.orderSkuName = orderSkuName;
}
public void setOrderSkuName(String orderSkuName) {
this.orderSkuName = orderSkuName;
}
public String getOrderSkuName() {
return orderSkuName;
}
public void setiOrderDao(IOrderDao iOrderDao) {
this.iOrderDao = iOrderDao;
}
IOrderDao iOrderDao;
public String getOrderInfo(String name){
return iOrderDao.bookOrder(name);
}
public void initTest(){
System.out.println("初始化呼叫方法");
}
public void tearDownTest(){
System.out.println("回收呼叫方法");
}
}
4、 建立order.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="orderDao" class="com.longteng.lesson2.dao.impl.OrderDao"></bean>
<bean id="orderService" class="com.longteng.lesson2.service.OrderService" init-method="initTest" destroy-method="tearDownTest" >
<constructor-arg name="orderSkuName" value="123456789"></constructor-arg>
<property name="iOrderDao" ref="orderDao"></property>
</bean>
</beans>
5、建立測試類
package com.longteng.lesson2.dao; import com.longteng.lesson2.service.OrderService; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class OrderDaoTest { ApplicationContext context; @Before public void initApplication(){ context = new ClassPathXmlApplicationContext("order.xml"); } @Test public void test(){ OrderService orderService = context.getBean("orderService", OrderService.class); System.out.println(orderService.getOrderInfo("zhou")); System.out.println(orderService.getOrderSkuName()); Assert.assertEquals("成功了","zhou預訂了訂單",orderService.getOrderInfo("zhou")); } }
6、測試結果
13:53:43.096 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Invoking init method 'initTest' on bean with name 'orderService' 初始化呼叫方法 13:53:43.097 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Finished creating instance of bean 'orderService' 13:53:43.098 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [[email protected]f7e0] 13:53:43.099 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'lifecycleProcessor' 13:53:43.101 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Could not find key 'spring.liveBeansView.mbeanDomain' in any property source 13:53:43.103 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'orderService' zhou預訂了訂單 123456789
--------------------------------------方式2通過註解方式實現----------------------------------
1、建立IOrderDao
package com.longteng.lesson2.dao; public interface IOrderDao { public String bookOrder(String name); }
2、建立IOrderDao的實體 OrderDao
package com.longteng.lesson2.dao.impl; import com.longteng.lesson2.dao.IOrderDao; import org.springframework.stereotype.Repository; @Repository public class OrderDao implements IOrderDao { @Override public String bookOrder(String name) { return name+"預訂了訂單"; } }
3、建立OrderService
package com.longteng.lesson2.service; import com.longteng.lesson2.dao.IOrderDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @Service public class OrderService { @Autowired IOrderDao iOrderDao; public String getOrderInfo(String name){ return iOrderDao.bookOrder(name); } @PostConstruct public void initTest(){ System.out.println("初始化呼叫方法"); } @PreDestroy public void tearDownTest(){ System.out.println("回收呼叫方法"); } }
4、建立Order配置類
package com.longteng.lesson2.config; import com.longteng.lesson2.service.OrderService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan(basePackages = {"com.longteng.lesson2.dao","com.longteng.lesson2.service"}) public class OrderCfg { @Bean public OrderService getOrderService(){ return new OrderService(); } }
5、建立測試類
package com.longteng.lesson2.dao; import com.longteng.lesson2.config.OrderCfg; import com.longteng.lesson2.service.OrderService; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class OrderDaoTest { ApplicationContext context; @Before public void initApplication(){ context = new AnnotationConfigApplicationContext(OrderCfg.class); } @Test public void test(){ OrderService orderService = context.getBean("orderService", OrderService.class); System.out.println(orderService.getOrderInfo("zhou")); Assert.assertEquals("成功了","zhou預訂了訂單",orderService.getOrderInfo("zhou")); } }
6、測試結果
14:03:10.423 [main] DEBUG org.springframework.context.annotation.CommonAnnotationBeanPostProcessor - Invoking init method on bean 'getOrderService': public void com.longteng.lesson2.service.OrderService.initTest() 初始化呼叫方法 14:03:10.423 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Finished creating instance of bean 'getOrderService' 14:03:10.423 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory' 14:03:10.444 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [[email protected]1a9a] 14:03:10.444 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'lifecycleProcessor' 14:03:10.447 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Could not find key 'spring.liveBeansView.mbeanDomain' in any property source 14:03:10.449 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'orderService' zhou預訂了訂單 Process finished with exit code 0