zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    三星S11首曝光/2019款iPhone预测价格出炉
    聊聊我用过的电纸书
    阿里云VOD 视频点播(三),后台java接口代码
    阿里云VOD 视频点播(二)、VUE视频上传,视频播放
    阿里云VOD 视频点播(一)、nuxt视频上传,视频播放
    大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7
    杂谈——怎么给CSDN博客加上目录(很详细但是很简单)
    分布式入门之1:Lease机制
    分布式入门之1:Lease机制
    分布式入门之1:Lease机制
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/10877186.html
Copyright © 2011-2022 走看看