0
点赞
收藏
分享

微信扫一扫

Spring - Bean管理之生命周期之BeanPostProcessor



如果对动态代理还未曾有一定的认识(下文会用到),请先看这篇:​​Java - 动态代理机制讲解(Proxy.newProxyInstance)​​ 


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();
}
}
运行结果:

第五步:初始化前方法...
第八步:初始化后方法...
查询用户。。。
权限校验===================
保存用户。。。
修改用户。。。
删除用户。。。


举报

相关推荐

0 条评论