aopFramework 动态代理框架

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

BeanFactory:--------------------------  

package com.hans.aopframework;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import com.hans.myproxy.Advice;

public class BeanFactory {
 
 Properties properties = new Properties();
 
 public BeanFactory(InputStream ips){
  try {
   properties.load(ips);
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

 public Object getBean(String name){
  String className = properties.getProperty(name); //得到类名
  Object bean = null;
  try {
   Class clazzBean = Class.forName(className); //反射得到类
   bean = clazzBean.newInstance();
  } catch (Exception e) {
   e.printStackTrace();
  }
   
  if(bean instanceof ProxyBeanFactory){ //如果此类是个代理类
   Object proxy = null;
   ProxyBeanFactory proxyBeanFactory = (ProxyBeanFactory)bean; //强转代理对象
   try {
    Advice advice = (Advice) Class.forName(properties.getProperty(name + ".advice")).newInstance(); //得到建议
    Object target = Class.forName(properties.getProperty(name + ".target")).newInstance(); //得到目标
    proxyBeanFactory.setAdvice(advice);
    proxyBeanFactory.setTarget(target);
    proxy = proxyBeanFactory.getProxy(); //创建代理
   } catch (Exception e) {
    e.printStackTrace();
   }
   
  }
  return bean;
 }
 
 
}




ProxyBeanFactory:--------------  负责创建代理

package com.hans.aopframework;

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

import com.hans.myproxy.Advice;

public class ProxyBeanFactory {

 private static Object target;
 private static Advice advice;

 public static Object getTarget() {
  return target;
 }

 public static void setTarget(Object target) {
  ProxyBeanFactory.target = target;
 }

 public static Advice getAdvice() {
  return advice;
 }

 public static void setAdvice(Advice advice) {
  ProxyBeanFactory.advice = advice;
 }

 public static Object getProxy() {
  return Proxy.newProxyInstance(target.getClass().getClassLoader(),
    target.getClass().getInterfaces(), new InvocationHandler() {

     @Override
     public Object invoke(Object proxy, Method method,
       Object[] args) throws Throwable {
      advice.content1(method);
      Object retObje = method.invoke(target, args);
      advice.content2(method);
      return retObje;
     }
    });
 }

}


测试类:----------------------

package com.hans.aopframework;

import java.io.InputStream;

public class BeanFactoryTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  try {
   InputStream ips = BeanFactoryTest.class.getResourceAsStream("config.properties");
   Object f = new BeanFactory(ips).getBean("xxx");
   System.out.println(f.getClass().getName());
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

}
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值