java中的invoke方法
A. java invoke
這個看上去像spring的aop
method對象調用invoke方法,該方法傳入兩個參數,一個是bean對象,一個是Object數組,傳入的數組是空值,沒有任何數據。
invoke方法運行完之後,返回一個結果,將結果賦值給Object類型的result。
如果這是aop的話,就是面向切面的。invoke方法是在原方法中插入一段自己的邏輯,並返回。用來做日誌之類的處理
B. java中invoke()的作用是什麼
用來執行一個方法,是反射中知識 。
就是調用類中的方法,最簡單的用法是可以把方法參數化invoke(class, method)。
比如你Test類里有一系列名字相似的方法setValue1、setValue2等等。
可以把方法名存進數組v[],然後循環里invoke(test,v[i]),就順序調用了全部setValue。
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。
Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程
C. Java反射invoke怎麼用
Java反射中invoke的用法,我給你個例子,你看看吧(每一句都有注釋)
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;
public class S{
public void test(){
System.out.println("test");
}
public static void main(String[] args) throws Exception {
//獲取S類
Class clzz = Class.forName("S");
//獲取S類默認無參構造方法
Constructor con = clzz.getDeclaredConstructor();
//創建一個S類實例對象
S s =(S)con.newInstance();
//獲取S類的公有成員方法test
Method m=clzz.getDeclaredMethod("test");
//調用S類對象s中的公有成員方法test
m.invoke(s);
}
}
D. java反射中method類中的invoke方法是做什麼的,他有什麼作用
首先Method類代表一個方法,所以invoke(調用)就是調用Method類代表的方法。它可以讓你實現動態調用,例如你可以動態的傳人參數。下面是一個簡單的例子。
publicclassMethodTest
{
publicstaticvoidmain(String[]args)
{
String[]names={"tom","tim","allen","alice"};
Class<?>clazz=Test.class;
try
{
Methodmethod=clazz.getMethod("sayHi",String.class);
for(Stringname:names)
method.invoke(clazz.newInstance(),name);
}catch(NoSuchMethodExceptione)
{
e.printStackTrace();
}catch(IllegalAccessExceptione)
{
e.printStackTrace();
}catch(IllegalArgumentExceptione)
{
e.printStackTrace();
}catch(InvocationTargetExceptione)
{
e.printStackTrace();
}catch(InstantiationExceptione)
{
e.printStackTrace();
}
}
}
classTest
{
publicvoidsayHi(Stringname)
{
System.out.println("Hi"+name);
}
}
E. java中 invoke()如何傳實體進去
你問的是Method類的invoke方法吧
這個方法的定義是:invoke(Object obj,Object...args)
第一個參數為類的實例,第二個參數為相應函數中的參數
你的問題里說如何傳實體進去,很簡單,你定義的方法只要寫了接收參數(數量無所謂),那麼直接(弄成數組)傳進去就是了。
以下是一個例子:
public class Test
{
public void print(String string)
{
System.out.println("print(String string)");
System.out.println(string);
}
public void print(String ... strings)
{
System.out.println("print(String ... string)");
for(String string: strings)
System.out.println(string);
}
public static void main(String[] args) throws Exception
{
Test test = new Test();
// 調用 print(String string)
Method method1 = test.getClass().getMethod("print", String.class);
method1.invoke(test, "a");
// 調用 print(String ... strings)
Method method2 = test.getClass().getMethod("print", Array.newInstance(String.class, 0).getClass());
method2.invoke(test, new String[][]{new String[]{"a", "b"}});
}
}
F. JAVAstruts框架中的攔截器的invocation.invoke方法有什麼用,其返回值亦是什
invocation.invoke()
就是通知
struts2
接著干下面的事情
比如
調用下一個
攔截器
或
執行下一個Action
攔截器的值
返回值
要麼代表繼續攔截
要麼是success等一些類Action類提供的靜態量
它會根據這個值去到相應的頁面
G. java invoke 反射的使用方法
你這個類是一個嚴格的JavaBean格式。。所以先可以獲得屬性。。然後獲得讀寫方法。。然後寫值。。讀值。。hibernate其實也就是採用的這種差不多的方式。。
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("TaskProvidePropsList");//這里的類名是全名。。有包的話要加上包名
Object obj = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
//寫數據
for(Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
Method wM = pd.getWriteMethod();//獲得寫方法
wM.invoke(obj, 2);//因為知道是int類型的屬性,所以傳個int過去就是了。。實際情況中需要判斷下他的參數類型
}
//讀數據
for(Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
Method rM = pd.getReadMethod();//獲得讀方法
Integer num = (Integer) rM.invoke(obj);//因為知道是int類型的屬性,所以轉換成integer就是了。。也可以不轉換直接列印
System.out.println(num);
}
}
}