AOP

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

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 实体工厂类
 * @author Administrator
 *
 */
public class BeanFactory {

    public static  Object  getBean(String id)  {
        
        //通过id获取一个指定的实现类
        
        
        try {
            //获取document对象
            Document doc=new SAXReader().read(BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml"));
        
            //获取指定的bean对象
            Element ele=(Element) doc.selectSingleNode("//bean[@id='"+id+"']");
            //获取bean对象的class属性
             String  value=ele.attributeValue("class");
            
             //反射--以前的逻辑 直接返回的是实例
             //return Class.forName(value).newInstance();
             
             //现在对service中方法进行加强 返回值的是代理对象
             final Object obj = Class.forName(value).newInstance();
             //是service的实现例
             if(id.endsWith("Service")) {
                Object proxyobj= Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new InvocationHandler() {
                    
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //继续判断是否调动了add方法获取regist
                        if("add".equals(method.getName())||"regist".equals(method.getName())) {
                            System.out.println("添加操作");
                            return method.invoke(obj, args);
                        }
                        
                        
                        return method.invoke(obj, args);
                    }
                });
                
                //若是service方法 返回的是代理对象
                return proxyobj;
                
             }
             return obj;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    
       public static void main(String[] args) {
          
           System.out.println(getBean("ProductDao"));
    }
}
备注:由于个人原因,本博客暂停更新。如有问题可联系本人,本人提供技术指导、学习方向、学习路线。本人微信wlp1156107728(添加注明来意)   QQ1156107728(添加注明来意)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值