為了賬號安全,請及時綁定郵箱和手機立即綁定

第一篇:從Java基礎開始學習Spring AOP——Java方法反射

2016.07.29 00:34 6949瀏覽

很多課程和書都是從什么切點,切面,連接點,通知(前置,后置,返回,異常和環繞通知)來論述AOP的應用的,對于初學者而言要搞清楚啥叫做切面就想當不容易了,何況要搞清楚它們如何運行,流程是什么就更加困難了。
不過不要緊,而筆者認為從其底層實現原理——動態代理模式和反射區介紹它,會更加清晰和明確,也會更為簡單一些。
所以今天的第一篇要學習的是反射技術,反射技術是Java的一種在各類框架中非常常用的一門技術。
好,廢話不多說我們先來看看一個例子:

package com.learn.chapter1.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ReflectHello {

    public ReflectHello() {
    }

    public void sayHello(String name) {
        System.err.println("hello " + name);
    }

    public static void main(String []args) {
        try {
            //通過反射生成對象,相當于 ReflectHello refect = new ReflectHello();
            ReflectHello refect = (ReflectHello)Class.forName("com.learn.chapter1.reflect.ReflectHello").newInstance();
            //通過類獲取方法,sayHello。
            Method method = refect.getClass().getMethod("sayHello", String.class);
            //相當于語句, refect.sayHello("張三")
            method.invoke(refect, "張三");
        } catch (InstantiationException  //捕捉異常
                IllegalAccessException  ClassNotFoundException  IllegalArgumentException 
                 SecurityException  NoSuchMethodException  InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

好,這個例子可以運行,我們稍微解釋一下:
首先我們通過Class.forName的形式加載了一個類的全限定名,那么JDK的類加載器就會去對應的包找到它,用newInstance代表生成一個類的實例(如果方法有構造參數的需要另外寫法)。這樣變可以得到一個ReflectHello的對象。
然后我們通過類去獲取sayHello方法,這里的getMethod,第一個為方法名稱,后面的是參數類型,可以是多個。
最后我們使用method.ivoke去反射方法,第一個是類對象,第二個是參數,也可以是多個。這相當于用對象調用了一次sayHello方法,只是這是使用反射調用而已。

好這個Java反射方法已經講完了,它也是Spring IOC的基礎,我們給出了class的全限定名,和一些參數就可以反射創建Bean,和注入屬性值了。也是通過這樣的一個原理。當然Spring的源碼會更完善和復雜,但是基礎我們是需要知道的。

點擊查看更多內容

本文原創發布于慕課網 ,轉載請注明出處,謝謝合作

43人點贊

若覺得本文不錯,就分享一下吧!

評論

相關文章推薦

正在加載中
意見反饋 幫助中心 APP下載
官方微信

舉報

0/150
提交
取消
lpl竞猜