IOC初始化销毁的2种实现方式

1、bean内调用init-method 和destroy-method

2、通过注解实现@PostConstruct 和@PreDestroy

-----------------------------bean内调用init-method 和destroy-method------------------------

1、创建IOrderDao

  1. package com.longteng.lesson2.dao;
  2.  
  3. public interface IOrderDao {
  4. public String bookOrder(String name);
  5. }

2、创建IOrderDao的实体 OrderDao

 
  1. package com.longteng.lesson2.dao.impl;
  2.  
  3. import com.longteng.lesson2.dao.IOrderDao;
  4.  
  5. public class OrderDao implements IOrderDao {
  6. @Override
  7. public String bookOrder(String name) {
  8. return name+"预订了订单";
  9. }
  10. }
 

3、创建OrderService

 
  1. package com.longteng.lesson2.service;
    import com.longteng.lesson2.dao.IOrderDao;
  2.  
  3. public class OrderService {
    private String orderSkuName;
    public OrderService(String orderSkuName){
    this.orderSkuName = orderSkuName;
    }
  4.  
  5. public void setOrderSkuName(String orderSkuName) {
    this.orderSkuName = orderSkuName;
    }
  6.  
  7. public String getOrderSkuName() {
    return orderSkuName;
    }
  8.  
  9. public void setiOrderDao(IOrderDao iOrderDao) {
    this.iOrderDao = iOrderDao;
    }
  10.  
  11. IOrderDao iOrderDao;
  12.  
  13. public String getOrderInfo(String name){
    return iOrderDao.bookOrder(name);
    }
    public void initTest(){
    System.out.println("初始化调用方法");
    }
    public void tearDownTest(){
    System.out.println("回收调用方法");
    }
    }
 

4、 创建order.xml文件

 
  1. <?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">
  2.  
  3. <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、创建测试类

 
  1. package com.longteng.lesson2.dao;
  2.  
  3. import com.longteng.lesson2.service.OrderService;
  4. import org.junit.Assert;
  5. import org.junit.Before;
  6. import org.junit.Test;
  7. import org.springframework.context.ApplicationContext;
  8. import org.springframework.context.support.ClassPathXmlApplicationContext;
  9.  
  10. public class OrderDaoTest {
  11. ApplicationContext context;
  12. @Before
  13. public void initApplication(){
  14. context = new ClassPathXmlApplicationContext("order.xml");
  15. }
  16. @Test
  17. public void test(){
  18. OrderService orderService = context.getBean("orderService", OrderService.class);
  19. System.out.println(orderService.getOrderInfo("zhou"));
  20. System.out.println(orderService.getOrderSkuName());
  21. Assert.assertEquals("成功了","zhou预订了订单",orderService.getOrderInfo("zhou"));
  22. }
  23. }
 

6、测试结果

  1. ::43.096 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Invoking init method 'initTest' on bean with name 'orderService'
  2. 初始化调用方法
  3. ::43.097 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Finished creating instance of bean 'orderService'
  4. ::43.098 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@d7f7e0]
  5. ::43.099 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'lifecycleProcessor'
  6. ::43.101 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Could not find key 'spring.liveBeansView.mbeanDomain' in any property source
  7. ::43.103 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'orderService'
  8. zhou预订了订单

--------------------------------------方式2通过注解方式实现----------------------------------

1、创建IOrderDao

  1. package com.longteng.lesson2.dao;
  2.  
  3. public interface IOrderDao {
  4. public String bookOrder(String name);
  5. }

2、创建IOrderDao的实体 OrderDao

  1. package com.longteng.lesson2.dao.impl;
  2.  
  3. import com.longteng.lesson2.dao.IOrderDao;
  4. import org.springframework.stereotype.Repository;
  5.  
  6. @Repository
  7. public class OrderDao implements IOrderDao {
  8. @Override
  9. public String bookOrder(String name) {
  10. return name+"预订了订单";
  11. }
  12. }

3、创建OrderService

  1. package com.longteng.lesson2.service;
  2. import com.longteng.lesson2.dao.IOrderDao;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5.  
  6. import javax.annotation.PostConstruct;
  7. import javax.annotation.PreDestroy;
  8.  
  9. @Service
  10. public class OrderService {
  11.  
  12. @Autowired
  13. IOrderDao iOrderDao;
  14.  
  15. public String getOrderInfo(String name){
  16. return iOrderDao.bookOrder(name);
  17. }
  18. @PostConstruct
  19. public void initTest(){
  20. System.out.println("初始化调用方法");
  21. }
  22. @PreDestroy
  23. public void tearDownTest(){
  24. System.out.println("回收调用方法");
  25. }
  26. }

4、创建Order配置类

  1. package com.longteng.lesson2.config;
  2.  
  3. import com.longteng.lesson2.service.OrderService;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.ComponentScan;
  6. import org.springframework.context.annotation.Configuration;
  7.  
  8. @Configuration
  9. @ComponentScan(basePackages = {"com.longteng.lesson2.dao","com.longteng.lesson2.service"})
  10. public class OrderCfg {
  11.  
  12. @Bean
  13. public OrderService getOrderService(){
  14. return new OrderService();
  15. }
  16. }

5、创建测试类

  1. package com.longteng.lesson2.dao;
  2.  
  3. import com.longteng.lesson2.config.OrderCfg;
  4. import com.longteng.lesson2.service.OrderService;
  5. import org.junit.Assert;
  6. import org.junit.Before;
  7. import org.junit.Test;
  8. import org.springframework.context.ApplicationContext;
  9. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  10.  
  11. public class OrderDaoTest {
  12. ApplicationContext context;
  13. @Before
  14. public void initApplication(){
  15. context = new AnnotationConfigApplicationContext(OrderCfg.class);
  16. }
  17. @Test
  18. public void test(){
  19. OrderService orderService = context.getBean("orderService", OrderService.class);
  20. System.out.println(orderService.getOrderInfo("zhou"));
  21. Assert.assertEquals("成功了","zhou预订了订单",orderService.getOrderInfo("zhou"));
  22. }
  23. }

6、测试结果

  1. ::10.423 [main] DEBUG org.springframework.context.annotation.CommonAnnotationBeanPostProcessor - Invoking init method on bean 'getOrderService': public void com.longteng.lesson2.service.OrderService.initTest()
  2. 初始化调用方法
  3. ::10.423 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Finished creating instance of bean 'getOrderService'
  4. ::10.423 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory'
  5. ::10.444 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@e31a9a]
  6. ::10.444 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'lifecycleProcessor'
  7. ::10.447 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Could not find key 'spring.liveBeansView.mbeanDomain' in any property source
  8. ::10.449 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'orderService'
  9. zhou预订了订单
  10.  
  11. Process finished with exit code

IOC初始化销毁的2种实现方式的更多相关文章

  1. 🙈羞,Spring Bean 初始化/销毁竟然有这么多姿势

    文章来源:http://1t.click/bfHN 一.前言 日常开发过程有时需要在应用启动之后加载某些资源,或者在应用关闭之前释放资源.Spring 框架提供相关功能,围绕 Spring Bean ...

  2. Spring中bean的初始化和销毁几种实现方式

    Bean的生命周期 : 创建bean对象 – 属性赋值 – 初始化方法调用前的操作 – 初始化方法 – 初始化方法调用后的操作 – --- 销毁前操作 – 销毁方法的调用. [1]init-metho ...

  3. bean初始化和销毁的几种方式

    Bean生命周期 Bean创建 -->初始化 -->销毁 1.自定义Bean初始化 和销毁的方法 init-method和destroy-method 创建Bike类 public cla ...

  4. Spring随笔 —— IOC配置的三种不同方式简介

    在spring framework中,IOC的配置是最基础的部分,常见的配置方式有基于xml文件和基于注解的配置方式.除了这两种配置方式之外,今天这里再介绍另一种配置方式,先用小demo重温下我们熟悉 ...

  5. spring ioc三种注入方式

    spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...

  6. Spring IOC 依赖注入的两种方式XML和注解

    依赖注入的原理 依赖注入的方式---XML配置 依赖注入的方式---注解的方式 Spring 它的核心就是IOC和AOP.而IOC中实现Bean注入的实现方式之一就是DI(依赖注入). 一 DI的原理 ...

  7. Spring IOC 三种注入方式

    1.    接口注入 2.    setter注入 3.    构造器注入 对象与对象之间的关系可以简单的理解为对象之间的依赖关系:A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类 ...

  8. Spring IOC以及三种注入方式

    IOC是spring的最基础部分,也是核心模块,Spring的其他组件模块和应用开发都是以它为基础的.IOC把spring的面向接口编程和松耦合的思想体现的淋漓尽致. IOC概念 IOC(Invers ...

  9. JAVA中初始化ArrayList的三种方式

    下面讲一下ArrayList初始化的几种不同方式. 一.最常用的初始化方式. List<String> list1 = new ArrayList<String>(); lis ...

随机推荐

  1. 108.生成和下载csv文件

    生成CSV文件 有时候我们做的网站,需要将一些数据,生成一个csv文件返回浏览器,并且是作为附件的形式下载下来. 生成小的csv文件: 生成一个小的csv文件,我们用Python内置的csv模块来处理 ...

  2. 题解 P2981 【[USACO10FEB]奶牛在冰Cows on Ice】

    楼上的思路都是从一个石头找跳到另一个石头的路径,但其实这题可以对于上下左右四个方向分别做一个虚拟节点,然后只需要找虚拟节点左边的虚拟节点就行了 问题是:不会用set怎么办??? 其实可以发现用vect ...

  3. ZJNU 1262 - 电灯泡——中高级

    在影子没有到达墙角前,人越远离电灯,影子越长,所以这一部分无需考虑 所以只需要考虑墙上影子和地上影子同时存在的情况 因为在某一状态存在着最值 所以如果以影子总长与人的位置绘制y-x图像 会呈一个类似y ...

  4. 第五章——Pytorch中常用的工具

    2018年07月07日 17:30:40 __矮油不错哟 阅读数:221   1. 数据处理 数据加载 ImageFolder DataLoader加载数据 sampler:采样模块 1. 数据处理 ...

  5. ios ktvhttpcache 音视频缓存插件使用

    1.PodFile 文件增加 pod 'KTVHTTPCache',  '~> 2.0.0' 2.在终端 需要先cd到podfile文件所在目录  执行pod install 3.在header ...

  6. Linux 标准IO库介绍

    1.标准IO和文件IO有什么区别? (1).看起来使用时都是函数,但是:标准IO是C库函数,而文件IO是Linux系统的API. (2).C语言库函数是由API封装而来的.库函数内部也是通过调用API ...

  7. [Scoi2014]方伯伯的OJ(动态开点splay)

    开始没看数据范围差点以为是这题了:https://www.cnblogs.com/hfctf0210/p/10911340.html 然后看到n<=1e8,怎么这么大? 所以这题需要用动态开点线 ...

  8. 哈夫曼编码的理解(Huffman Coding)

    哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种.Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最 ...

  9. 使用conda管理python环境

    一.动机 最近打算折腾vn.py,但只有py27版本的,因为一向习惯使用最新稳定版的,所以不得不装py27的环境,不得不说 Python的全局锁真的很烦. 身为懒癌患者,必然使用全功能的anacond ...

  10. 关于tomcat报错记录

    启动报错关键信息如下: Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations ...