Spring - Bean管理之生命周期之BeanPostProcessor
发布日期:2021-06-30 23:46:58 浏览次数:2 分类:技术文章

本文共 2585 字,大约阅读时间需要 8 分钟。

如果对动态代理还未曾有一定的认识(下文会用到),请先看这篇: 

package com.imooc.ioc.demo3;public interface UserDao {    public void findAll();    public void save();    public void update();    public void delete();}package com.imooc.ioc.demo3;public class UserDaoImpl implements UserDao {    @Override    public void findAll() {        System.out.println("查询用户。。。");    }    @Override    public void save() {        System.out.println("保存用户。。。");    }    @Override    public void update() {        System.out.println("修改用户。。。");    }    @Override    public void delete() {        System.out.println("删除用户。。。");    }}
package com.imooc.ioc.demo3;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class MyBeanPostProcessor implements BeanPostProcessor {    @Override    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {        System.out.println("第五步:初始化前方法...");        return bean;    }    @Override    public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException {        System.out.println("第八步:初始化后方法...");                if("userDao".equals(beanName)){            Object proxy = Proxy.newProxyInstance(bean.getClass().getClassLoader(), bean.getClass().getInterfaces(), new InvocationHandler() {                                @Override                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {                    if("save".equals(method.getName())){                        System.out.println("权限校验===================");                        return method.invoke(bean,args);                    }                    return method.invoke(bean,args);                }            });            return proxy;        }        else{            return bean;        }    }}
package com.imooc.ioc.demo3;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Bean的作用范围的测试 */public class SpringDemo3 {    @Test    public void demo3(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");        UserDao userDao = (UserDao)applicationContext.getBean("userDao");        userDao.findAll();        userDao.save();        userDao.update();        userDao.delete();    }}
运行结果:第五步:初始化前方法...第八步:初始化后方法...查询用户。。。权限校验===================保存用户。。。修改用户。。。删除用户。。。

转载地址:https://lux-sun.blog.csdn.net/article/details/84110110 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Win系统 - NETSH WINSOCK RESET
下一篇:Spring - Bean管理之生命周期

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月29日 14时28分24秒