欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring——bean生命周期的第五步与第八步之使用动态代理实现增强操作

程序员文章站 2022-02-08 07:25:51
...

1、创建一个bean处理类 ,实现BeanPostProcessor接口。在其提供的两个方法中进行增强操作

package cn.itcast.demo4;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
//最重要的是以下两步:可以进行一些增强操作
public class MyBeanPostProcessor implements BeanPostProcessor{
		//第五步
	  public  Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException{
		System.out.println("第五步:初始化之前执行");
		  return bean;
		  
	  }
		//第八步
	  public  Object postProcessAfterInitialization(final Object bean,String beanName) throws BeansException{
		  System.out.println("第八步:在初始化之后执行");
		  //使用动态代理实现方法增强:
		  //进行判断,只对lifeService这个bean进行增强操作 
			if(beanName.equals("lifeServiceImp")){
				//获取代理 :使用proxy,要求代理对象类必须实现至少一个接口
				  Object proxy = Proxy.newProxyInstance(bean.getClass().getClassLoader(), bean.getClass().getInterfaces(), new InvocationHandler() {
					  //InvocationHandler为匿名内部类
					  //在调用代理的类中的方法的时候,就会自动调用invoke
					  //method为当前调用的方法
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						
						  System.out.println(method.getName());
						//进行判断,只对addUser方法进行增强操作
						if("addUser".equals(method.getName())){
							System.out.println("权限校验");
							Object result = method.invoke(bean, args);
							return result;
						}
						return method.invoke(bean, args);
						
					}
				});
				  return proxy;//返回代理对象才会执行增强操作
			}
			  
			return bean;//返回bean 不执行增强操作
	  
		  
	  }
}

2、在spring配置文件applicationContext.xml中配置 该类。其不需要配置id,因为它由ioc容器自动执行

		<!-- 不用设置id,它是由ioc容器自动调用的 -->
	<bean class="cn.itcast.demo4.MyBeanPostProcessor"></bean>

 

相关标签: spring