锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久精品久久久久久96,一区二区三区四区乱视频,日韩大片b站免费观看直播http://www.aygfsteel.com/xiaohuzi2008/category/53382.html闈㈡湞澶ф搗錛屾槬鏆栬姳寮zh-cnSat, 02 Mar 2013 14:42:52 GMTSat, 02 Mar 2013 14:42:52 GMT60銆愯漿銆戠悊瑙OPhttp://www.aygfsteel.com/xiaohuzi2008/archive/2013/03/02/395978.html灝忚儭瀛?/dc:creator>灝忚儭瀛?/author>Sat, 02 Mar 2013 14:28:00 GMThttp://www.aygfsteel.com/xiaohuzi2008/archive/2013/03/02/395978.htmlhttp://www.aygfsteel.com/xiaohuzi2008/comments/395978.htmlhttp://www.aygfsteel.com/xiaohuzi2008/archive/2013/03/02/395978.html#Feedback0http://www.aygfsteel.com/xiaohuzi2008/comments/commentRss/395978.htmlhttp://www.aygfsteel.com/xiaohuzi2008/services/trackbacks/395978.html

Aspect Oriented Programming  闈㈠悜鍒囬潰緙栫▼銆傝В鑰︽槸紼嬪簭鍛樼紪鐮佸紑鍙戣繃紼嬩腑涓鐩磋拷姹傜殑銆侫OP涔熸槸涓轟簡瑙h︽墍璇炵敓銆?/p>

鍏蜂綋鎬濇兂鏄細瀹氫箟涓涓垏闈紝鍦ㄥ垏闈㈢殑綰靛悜瀹氫箟澶勭悊鏂規硶錛屽鐞嗗畬鎴愪箣鍚庯紝鍥炲埌妯悜涓氬姟嫻併?/p>

AOP 鍦⊿pring妗嗘灦涓浣滀負鏍稿績緇勬垚閮ㄥ垎涔嬩竴錛岀殑紜甋pring灝咥OP鍙戞尌鍒板緢寮哄ぇ鐨勫姛鑳姐傛渶甯歌鐨勫氨鏄簨鍔℃帶鍒躲傚伐浣滀箣浣欙紝瀵逛簬浣跨敤鐨勫伐鍏鳳紝涓嶅厤闇瑕佷簡瑙e叾鎵浠ョ劧銆傚涔犱簡涓涓嬶紝鍐欎簡浜涚▼搴忓府鍔╃悊瑙c?/p>

AOP 涓昏鏄埄鐢ㄤ唬鐞嗘ā寮忕殑鎶鏈潵瀹炵幇鐨勩?/p>

1銆侀潤鎬佷唬鐞嗭細灝辨槸璁捐妯″紡涓殑proxy妯″紡

a銆佷笟鍔℃帴鍙?/p>

/**
 * 鎶借薄涓婚瑙掕壊錛氬0鏄庝簡鐪熷疄涓婚鍜屼唬鐞嗕富棰樼殑鍏卞悓鎺ュ彛銆?br /> * 
 * 
@author yanbin
 * 
 
*/
public interface ITalk {

    
public void talk(String msg);

}
b銆佷笟鍔″疄鐜?/div>
/**
 * 鐪熷疄涓婚瑙掕壊錛氬畾涔夌湡瀹炵殑瀵硅薄銆?br /> * 
 * 
@author yanbin
 * 
 
*/
public class PeopleTalk implements ITalk {

    
public String username;
    
public String age;

    
public PeopleTalk(String username, String age) {
        
this.username = username;
        
this.age = age;
    }

    
public void talk(String msg) {
        System.out.println(msg 
+ "!浣犲ソ,鎴戞槸" + username + "錛屾垜騫撮緞鏄?/span>" + age);
    }

    
public String getName() {
        
return username;
    }

    
public void setName(String name) {
        
this.username = name;
    }

    
public String getAge() {
        
return age;
    }

    
public void setAge(String age) {
        
this.age = age;
    }

}
c銆佷唬鐞嗗璞?/div>
/**
 * 浠g悊涓婚瑙掕壊錛氬唴閮ㄥ寘鍚鐪熷疄涓婚鐨勫紩鐢紝騫朵笖鎻愪緵鍜岀湡瀹炰富棰樿鑹茬浉鍚岀殑鎺ュ彛銆?br /> * 
 * 
@author yanbin
 * 
 
*/
public class TalkProxy implements ITalk {

    
private ITalk talker;

    
public TalkProxy(ITalk talker) {
        
// super();
        this.talker = talker;
    }

    
public void talk(String msg) {
        talker.talk(msg);
    }

    
public void talk(String msg, String singname) {
        talker.talk(msg);
        sing(singname);
    }

    
private void sing(String singname) {
        System.out.println(
"鍞辨瓕錛?/span>" + singname);
    }

}
d銆佹祴璇曠被

/**
 * 浠g悊嫻嬭瘯綾伙紝浣跨敤浠g悊
 *
 * 
@author yanbin
 * 
 
*/
public class ProxyPattern {

    
public static void main(String[] args) {
        
// 涓嶉渶瑕佹墽琛岄澶栨柟娉曠殑銆?/span>
        ITalk people = new PeopleTalk("AOP""18");
        people.talk(
"No ProXY Test");
        System.out.println(
"-----------------------------");

        
// 闇瑕佹墽琛岄澶栨柟娉曠殑錛堝垏闈級
        TalkProxy talker = new TalkProxy(people);
        talker.talk(
"ProXY Test""浠g悊");
    }

}

浠庤繖孌典唬鐮佸彲浠ョ湅鍑烘潵錛屼唬鐞嗘ā寮忓叾瀹炲氨鏄疉OP鐨勯洀褰€?涓婄浠g爜涓璽alk(String msg, String singname)鏄竴涓垏闈€傚湪浠g悊綾諱腑鐨剆ing(singname)鏂規硶鏄釜鍚庣疆澶勭悊鏂規硶銆?/p>

榪欐牱灝卞疄鐜頒簡錛屽叾浠栫殑杈呭姪鏂規硶鍜屼笟鍔℃柟娉曠殑瑙h︺備笟鍔′笉闇瑕佷笓闂ㄥ幓璋冪敤錛岃屾槸璧板埌talk鏂規硶錛岄『鐞嗘垚绔犵殑璋冪敤sing鏂規硶

鍐嶄粠榪欐浠g爜鐪嬶細1銆佽瀹炵幇浠g悊鏂瑰紡錛屽繀欏昏瀹氫箟鎺ュ彛銆?銆佹瘡涓笟鍔$被錛岄渶瑕佷竴涓唬鐞嗙被銆?/p>

2銆佸姩鎬佷唬鐞嗭細jdk1.5涓彁渚涳紝鍒╃敤鍙嶅皠銆傚疄鐜癐nvocationHandler鎺ュ彛銆?/p>

涓氬姟鎺ュ彛榪樻槸蹇呴』寰楋紝涓氬姟鎺ュ彛錛屼笟鍔$被鍚屼笂銆?/p>

a銆佷唬鐞嗙被錛?/p>


/**
 * 鍔ㄦ佷唬鐞嗙被
 * 
 * 
@author yanbin
 * 
 
*/
public class DynamicProxy implements InvocationHandler {

    
/** 闇瑕佷唬鐞嗙殑鐩爣綾?nbsp;*/
    
private Object target;

    
/**
     * 鍐欐硶鍥哄畾錛宎op涓撶敤:緇戝畾濮旀墭瀵硅薄騫惰繑鍥炰竴涓唬鐞嗙被
     * 
     * 
@param delegate
     * 
@return
     
*/
    
public Object bind(Object target) {
        
this.target = target;
        
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }

    
/**
     * 
@param Object
     *            target錛氭寚琚唬鐞嗙殑瀵硅薄銆?br />     * 
@param Method
     *            method錛氳璋冪敤鐨勬柟娉?br />     * 
@param Object
     *            [] args錛氭柟娉曡皟鐢ㄦ椂鎵闇瑕佺殑鍙傛暟
     
*/
    @Override
    
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object result 
= null;
        
// 鍒囬潰涔嬪墠鎵ц
        System.out.println("鍒囬潰涔嬪墠鎵ц");
        
// 鎵ц涓氬姟
        result = method.invoke(target, args);
        
// 鍒囬潰涔嬪悗鎵ц
        System.out.println("鍒囬潰涔嬪悗鎵ц");
        
return result;
    }

}
b銆佹祴璇曠被

/**
 * 嫻嬭瘯綾?br /> * 
 * 
@author yanbin
 * 
 
*/
public class Test {

    
public static void main(String[] args) {
        
// 緇戝畾浠g悊錛岃繖縐嶆柟寮忎細鍦ㄦ墍鏈夌殑鏂規硶閮藉姞涓婂垏闈㈡柟娉?/span>
        ITalk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk());
        iTalk.talk(
"涓氬姟璇存槑");
    }
}

杈撳嚭緇撴灉浼氭槸錛?/p>

鍒囬潰涔嬪墠鎵ц
people talk涓氬姟璇存硶
鍒囬潰涔嬪悗鎵ц

璇存槑鍙鍦ㄤ笟鍔¤皟鐢ㄦ柟娉曞垏闈箣鍓嶏紝鏄彲浠ュ姩鎬佺殑鍔犲叆闇瑕佸鐞嗙殑鏂規硶銆?/p>

浠庝唬鐮佹潵鐪嬶紝濡傛灉鍐嶅緩绔嬩竴涓笟鍔℃ā鍧楋紝涔熷彧闇瑕佷竴涓唬鐞嗙被銆侷Talk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk());  灝嗕笟鍔℃帴鍙e拰涓氬姟綾葷粦瀹氬埌鍔ㄦ佷唬鐞嗙被銆?/p>

浣嗘槸榪欑鏂瑰紡錛氳繕鏄渶瑕佸畾涔夋帴鍙c?/p>

3銆佸埄鐢╟glib

CGLIB鏄拡瀵圭被鏉ュ疄鐜頒唬鐞嗙殑錛屼粬鐨勫師鐞嗘槸瀵規寚瀹氱殑鐩爣綾葷敓鎴愪竴涓瓙綾伙紝騫惰鐩栧叾涓柟娉曞疄鐜板寮恒傞噰鐢ㄧ殑鏄戶鎵跨殑鏂瑰紡銆備笉緇嗚錛岀湅浣跨敤

a銆佷笟鍔$被


/**
 * 涓氬姟綾?br /> * 
 * 
@author yanbin
 * 
 
*/
public class PeopleTalk {

    
public void talk(String msg) {
        System.out.println(
"people talk" + msg);
    }

}
b銆乧glib浠g悊綾?/div>
/**
 * 浣跨敤cglib鍔ㄦ佷唬鐞?br /> * 
 * 
@author yanbin
 * 
 
*/
public class CglibProxy implements MethodInterceptor {

    
private Object target;

    
/**
     * 鍒涘緩浠g悊瀵硅薄
     * 
     * 
@param target
     * 
@return
     
*/
    
public Object getInstance(Object target) {
        
this.target = target;
        Enhancer enhancer 
= new Enhancer();
        enhancer.setSuperclass(
this.target.getClass());
        
// 鍥炶皟鏂規硶
        enhancer.setCallback(this);
        
// 鍒涘緩浠g悊瀵硅薄
        return enhancer.create();
    }

    @Override
    
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        Object result 
= null;
        System.out.println(
"浜嬬墿寮濮?/span>");
        result 
= methodProxy.invokeSuper(proxy, args);
        System.out.println(
"浜嬬墿緇撴潫");
        
return result;
    }

}
c.嫻嬭瘯綾?/div>
/**
 * 嫻嬭瘯綾?br /> * 
 * 
@author yanbin
 * 
 
*/
public class Test {

    
public static void main(String[] args) {
        PeopleTalk peopleTalk 
= (PeopleTalk) new CglibProxy().getInstance(new PeopleTalk());
        peopleTalk.talk(
"涓氬姟鏂規硶");
        peopleTalk.spreak(
"涓氬姟鏂規硶");
    }

}

鏈鍚庤緭鍑虹粨鏋滐細

浜嬬墿寮濮?br />people talk涓氬姟鏂規硶
浜嬬墿緇撴潫
浜嬬墿寮濮?br />spreak chinese涓氬姟鏂規硶
浜嬬墿緇撴潫

鐢變簬綃囧箙鏈夐檺錛岃繖綃囦富瑕佸AOP鐨勫師鐞嗙畝鍗曞疄鐜板仛浜嗘紨紺哄拰闃愯堪錛屾湁鍔╄嚜宸辯悊瑙c傝嚦浜嶴pring鐨凙OP瀹炵幇涓婇潰鏃犲涔庡叾鍙籌紝涓嶈繃瀹炵幇鏂歸潰澶嶆潅鐨勫銆?/p>

鍘熸枃鍑鴻嚜錛?div>http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html







]]> 主站蜘蛛池模板: 沭阳县| 睢宁县| 南江县| 兴业县| 永修县| 定结县| 屏山县| 乐亭县| 黑水县| 肃宁县| 北碚区| 启东市| 诏安县| 涪陵区| 娄底市| 青海省| 景泰县| 邯郸市| 错那县| 基隆市| 卓尼县| 若尔盖县| 田东县| 增城市| 阿拉善左旗| 重庆市| 西平县| 黎川县| 盐池县| 连平县| 兰西县| 冷水江市| 双鸭山市| 沙洋县| 鹿泉市| 汤阴县| 乌兰县| 宁晋县| 奉化市| 宿州市| 沭阳县|