• Spring


    1.生命周期介绍

    所有放在spring容器中执行的bean都会遵守bean的生命周期,生命周期如图:

    2. init-method 和destory-method

    在生命周期中,其中提到两个调用,这两个调用都是通过在spring的bean中添加属性即可

    • init-method 初次化执行方法
    • destory-method 销毁方法

    springConfig.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-4.3.xsd">
             
             <!-- 
                 init-method = 初次化方法,对应实现类的方法名 (用于初次化数据的)
                 destory-method = 销毁方法,对一个实现类的方法名 (用于销毁数据,只有在单列的情况下才会执行)
             -->
            <bean id="userServiceBean" class="com.test.spring.life.UserServiceImpl" init-method="myBegin" destroy-method="myDestory"></bean>
    </beans>

    实现类UserServiceImpl.java

    public class UserServiceImpl implements UserService{
    
        /**
         * 可以不加这个构造函数,添加上这个构造函数的目的是测试实例化的生命周期
         */
        public UserServiceImpl() {
            System.out.println("实例化");
        }
        
        /**
         * 实现接口方法
         */
        public void addUser() {
            System.out.println("添加用户成功");
        }
        
        /**
         * 初次化方法
         */
        public void myBegin() {
            System.out.println("生命周期 - 开始");
        }
        
        /**
         * 销毁方法
         */
        public void myDestory() {
            System.out.println("生命周期 - 销毁");
        }
    }

    测试类UserServiceTest.java

    public class UserServiceTest {
    
        @Test
        public void test() {
            //以前
    //        UserService userService = new UserServiceImpl();
    //        userService.addUser();
            
            /**
             * spring的写法,这是一个工厂类,这里有一个参数,参数对应配置文件的classpath位置,src为根目录
             */
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/com/test/spring/life/springConfig.xml");
            
            //这里的参数为 配置文件中 bean id,意思就是获取 对应id实例对象
            UserService us_1 = (UserService)context.getBean("userServiceBean");
            us_1.addUser();
            
            //容器关闭,容器类里的bean才会执行销毁方法,对应就是destory-method方法,注意:这个bean一定要是单列
            context.close();
        }
    }

    3.执行初次化方法前,和初次化方法后

    这两个执行点,都是通过钩子的方式执行,必须注意的是,假如配了这个BeanPostProcessor 钩子类,在spring容器中,所bean都会调用这两个方法,例如有10个bean,机会执行10次

    这里需要写一个类,实现BeanPostProcessor接口即可,然后在配置里面,添加这个类,如下

    自定义钩子类MyBeanPostProcessor

    public class MyBeanPostProcessor implements BeanPostProcessor {
    
    
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("执行init之前");
            return bean;
        }
        
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("执行init之后");
            return bean;
        }
    }

    配置,添加类钩子类配置

    <?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-4.3.xsd">
             
             <!-- 
                 init-method = 初次化方法 (用于初次化数据的)
                 destory-method = 销毁方法 (用于销毁数据,只有在单列的情况下才会执行)
             -->
            <bean id="userServiceBean" class="com.test.spring.life.UserServiceImpl" init-method="myBegin" destroy-method="myDestory"></bean>
    
            <!-- 钩子类 -->
            <bean class="com.test.spring.life.MyBeanPostProcessor"></bean>
    </beans>
  • 相关阅读:
    oracle安装界面中文乱码解决
    Vmware esxi开启snmp服务
    sybase ase 重启
    zabbix通过snmp监控vmware vpshere5.5
    Linux下安装Sybase ASE 16
    DATAGUARD在做SWITCHOVER切换时遇到问题总结
    UVA 1564
    Drupal 7 模块开发 建立模块帮助信息(hook_help)
    HTML5实现图片文件异步上传
    RGCDQ(线段树+数论)
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/10877186.html
Copyright © 2020-2023  润新知