Bean管理之生命週期之BeanPostProcessor
阿新 • • 發佈:2018-12-21
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; } } }
<bean class="com.imooc.ioc.demo3.MyBeanPostProcessor"/>
<bean id="userDao" class="com.imooc.ioc.demo3.UserDaoImpl"/>
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(); } }
執行結果:
第五步:初始化前方法...
第八步:初始化後方法...
查詢使用者。。。
許可權校驗===================
儲存使用者。。。
修改使用者。。。
刪除使用者。。。