国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - Java實現AOP功能的封裝與配置的小框架實例代碼

Java實現AOP功能的封裝與配置的小框架實例代碼

2021-04-01 14:24brianway JAVA教程

這篇文章主要介紹了Java實現AOP功能的封裝與配置的小框架實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文通過是動態代理實現的AOP功能的封裝與配置的小框架.加深對動態代理和AOP編程的理解

設計

根據配置文件的鍵xxx對應的值(類全名)創建相應類的對象。

當且僅當xxx對應的值為com.iot.proxy.aopframework.ProxyFactoryBean時,則生成相應的動態代理類對象。代理對象的目標類和通知實現類分別由xxx.targetxxx.advice配置

配置文件

config.propertiest位于aopframework包下

  • xxx代表要加載的類
  • xxx.advice代表通知接口的某個實現類
  • xxx.target代表委托類

#xxx=java.util.ArrayList
xxx=com.iot.proxy.aopframework.ProxyFactoryBean
xxx.advice=com.iot.proxy.MyAdvice
xxx.target=java.util.ArrayList

包:com.iot.proxy.aopframework,有如下幾個類/接口:

  • BeanFactory,用于讀取配置文件,根據配置創建相應的對象
  • ProxyFactoryBean,用于生成代理對象,含有兩個私有屬性:目標和通知
  • Advice,通知接口,用于把切面的代碼以對象的形式傳遞給InvocationHandler的的invoke方法
  • MyAdvice,Advice接口的一個實現類,打印執行方法前的時間及執行耗時
  • AopFrameWorkTest,測試效果

代碼

Advice接口

?
1
2
3
4
5
6
7
8
9
10
package com.iot.proxy.aopframework;
 
import java.lang.reflect.Method;
/**
 * Created by brian on 2016/2/2.
 */
public interface Advice {
  void beforeMethod(Method method);
  void aftereMethod(Method method);
}

MyAdvice類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.iot.proxy.aopframework;
import java.lang.reflect.Method;
/**
 * Created by brian on 2016/2/2.
 */
public class MyAdvice implements Advice{
    long beginTime = 0 ;
    @Override
      public void beforeMethod(Method method) {
        System.out.println(method.getName()+" before at "+beginTime);
        beginTime = System.currentTimeMillis();
    }
    @Override
      public void aftereMethod(Method method) {
        long endTime = System.currentTimeMillis();
        System.out.println(method.getName()+" cost total "+ (endTime-beginTime));
    }
}

BeanFactory類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package com.iot.proxy.aopframework;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
 * Created by brian on 2016/2/2.
 */
public class BeanFactory {
    Properties properties = new Properties();
    public BeanFactory(InputStream inputStream){
        try {
            properties.load(inputStream);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
    public Object getBean(String name){
        String className = properties.getProperty(name);
        Object bean = null;
        try {
            Class clazz = Class.forName(className);
            bean = clazz.newInstance();
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        catch (InstantiationException e) {
            e.printStackTrace();
        }
        catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        if (bean instanceof ProxyFactoryBean){
            ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean)bean;
            Advice advice = null;
            Object target = null;
            try {
                advice = (Advice) Class.forName(properties.getProperty(name+".advice")).newInstance();
                target = Class.forName(properties.getProperty(name+".target")).newInstance();
            }
            catch (InstantiationException e) {
                e.printStackTrace();
            }
            catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            proxyFactoryBean.setAdvice(advice);
            proxyFactoryBean.setTarget(target);
            Object proxy = ((ProxyFactoryBean) bean).getProxy();
            return proxy;
        }
        return bean;
    }
}

ProxyFactoryBean類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.iot.proxy.aopframework;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
 * Created by brian on 2016/2/3.
 */
public class ProxyFactoryBean {
    private Object target;
    private Advice advice;
    public Object getProxy(){
        Object proxy = Proxy.newProxyInstance(
                target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                new InvocationHandler() {
            @Override
                      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                advice.beforeMethod(method);
                Object retVal = method.invoke(target,args);
                advice.aftereMethod(method);
                return retVal;
            }
        }
        );
        return proxy;
    }
    public Object getTarget() {
        return target;
    }
    public void setTarget(Object target) {
        this.target = target;
    }
    public Advice getAdvice() {
        return advice;
    }
    public void setAdvice(Advice advice) {
        this.advice = advice;
    }
}

AopFrameWorkTest類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.iot.proxy.aopframework;
import java.io.InputStream;
import java.util.Collection;
/**
 * Created by brian on 2016/2/3.
 */
public class AopFrameWorkTest {
    public static void main(String[] args) {
        InputStream inputStream = AopFrameWorkTest.class.getResourceAsStream("config.properties");
        Object bean = new BeanFactory(inputStream).getBean("xxx");
        System.out.println(bean.getClass().getName());
        ((Collection) bean).clear();
    }
}

輸出

  • 配置xxx=com.iot.proxy.aopframework.ProxyFactoryBean

輸出為:

com.sun.proxy.$Proxy0
clear before at 0
clear cost total 0

  • 配置xxx=java.util.ArrayList

輸出為:

java.util.ArrayList

可以看出,只改變配置文件,就可改變代碼的運行結果,從而達到靈活的效果

總結

以上就是本文關于Java實現AOP功能的封裝與配置的小框架實例代碼的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/h3243212/article/details/50659231

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品原创巨作av | 欧美日韩视频在线 | 视频四区 | 久草视频在线播放 | 中文字幕色 | 91精品一区二区三区久久久久久 | 午夜久久久久久久 | 精品一区二区三区中文字幕老牛 | 午夜私人视频 | 天天操天天拍 | 亚洲一本 | 九九久久免费 | 一级黄色影视 | 亚洲午夜一区 | 午夜大片男女免费观看爽爽爽尤物 | 99精品欧美一区二区三区综合在线 | 久久久久久国产精品 | av短片在线| 99热激情 | 日韩在线精品 | 欧美日韩一区二区三区不卡视频 | 成人免费aaa | 久久91精品 | 日韩精品一区二区在线观看 | 人人射在线观看 | 毛片高清| 亚洲 欧美 日韩在线 | 久久免费精品视频 | 欧美日韩一区二区三区不卡视频 | www一区 | 亚洲精品久久久久久久久久久 | 国产精品高清一区二区 | 日韩免费电影 | 亚洲色图50p | 精品视频一区二区三区四区 | 曰本人一级毛片免费完整视频 | 亚洲日韩中文字幕在线播放 | 依人成人综合网 | 黄色av网站在线观看 | 亚洲色图一区二区三区 | 欧美在线视频一区二区 |