invokejava
❶ 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);
}
}
}
❷ java中invoke()的作用是什麼
用來執行一個方法,是反射中知識 。
就是調用類中的方法,最簡單的用法是可以把方法參數化invoke(class, method)。
比如你Test類里有一系列名字相似的方法setValue1、setValue2等等。
可以把方法名存進數組v[],然後循環里invoke(test,v[i]),就順序調用了全部setValue。
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。
Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程
❸ java invoke 傳遞參數問題
//獲得了Workbook對象之後,就可以通過它得到Sheet(工作表)對象了
Sheet[] sheet = wb.getSheets();
if(sheet!=null&&sheet.length>0){
//對每個工作表進行循環
for(int i=0;i < sheet.length;i++){
//得到當前工作表的行數
int rowNum = sheet[i].getRows();
System.out.println("rowNum ### "+rowNum);
for(int j=4;j < rowNum;j++){
//得到當前行的所有單元格
Cell[] cells = sheet[i].getRow(j);
Object objBean = objClass.newInstance();
if(cells!=null&&cells.length>0){
//對每個單元格進行循環
for(int k=0;k < cells.length;k++){
//讀取當前單元格的值
String cellValue = cells[k].getContents();
System.out.println("cellValue"+cellValue);
try {
proName = field[k].getName();
ReflectgetMethod.invokeSet(objBean, proName, cellValue);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
listBean.add(objBean);
}
}
}
}
我這是在導入excel數據時候用到的,希望對你有用吧!
❹ java 中 invoke()的作用是什麼
在寫代碼的時候,發現從父類class通過getDeclaredMethod獲取的Method可以調用子類的對象,而子類改寫了這個方法,從子類class通過getDeclaredMethod也能獲取到Method,這時去調用父類的對象也會報錯。雖然這是很符合多態的現象,也符合java的動態綁定規范,但還是想弄懂java是如何實現的,就學習了下Method的源代碼。
Method的invoke方法:
1、先檢查AccessibleObject的override屬性是否為true。
AccessibleObject是Method,Field,Constructor的父類,override屬性默認為false,可調用setAccessible方法改變,如果設置為true,則表示可以忽略訪問許可權的限制,直接調用。
2、如果不是ture,則要進行訪問許可權檢測。用Reflection的quickCheckMemberAccess方法先檢查是不是public的,如果不是再用Reflection.getCallerClass方法獲得到調用這個方法的Class,然後做是否有許可權訪問的校驗,校驗之後緩存一次,以便下次如果還是這個類來調用就不用去做校驗了,直接用上次的結果。
3、調用MethodAccessor的invoke方法。每個Method對象包含一個root對象,root對象里持有一個MethodAccessor對象。我們獲得的Method獨享相當於一個root對象的鏡像,所有這類Method共享root里的MethodAccessor對象,(這個對象由ReflectionFactory方法生成,ReflectionFactory對象在Method類中是staticfinal的由native方法實例化。
❺ java invoke 以及 webservice詳解,求助
1、invoke()一般是java反射里的方法。
1、給外界提供的都是介面
定義一個介面,然後給這個介面定義一個實現類。
2、在src目錄下新建一個META-INF文件夾,在這個文件夾下新建一個xfire文件夾,在這個文件夾下再新建一個service.xml文件。
文件內容配置例子:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>CalculatorService</name><!--介面的名字-->
<serviceClass>com.hhaip.service.CalculatorService</serviceClass><!--定義的那個介面-->
<implementationClass>
com.hhaip.service.impl.CalculatorServiceImpl <!--介面的實現-->
</implementationClass>
</service>
</beans>
3、在web.xml中將服務公布出去
<!-- 將服務公布出去 -->
<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
---------------------------------------------以上就是服務端信息-------------------------------------------------
---------------------------------------------以下就是客戶端信息-------------------------------------------------
1、客戶端使用Ant自動建站工具幫我生成好訪問Web介面所需要的信息。
2、Ant自動生成好客戶端代碼後,只需要新建一個測試類測試。
Ant配置例子:
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="WebService" basedir="." default="webservice">
<property file="build.properties" />
<path id="project-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="webservice">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask"
classpathref="project-classpath" />
<wsgen outputDirectory="${scr.dir}" wsdl="${wsdl.dir}" package="com.hhaip.client" overwrite="true"/>
</target>
</project>
build.properties
scr.dir=${basedir}/src
lib.dir=E:/jar/xfire-1.2.6/lib
wsdl.dir=http://localhost:8888/myxfire/services/CalculatorService?wsdl
--> wsdl.dir這個路徑配置最重要。
測試類代碼:
public class TestService {
public static void main(String[] args) {
CalculatorServiceClient client = new CalculatorServiceClient();
//CalculatorServiceClient是Ant生成的客戶端代碼
CalculatorServicePortType portType = client.getCalculatorServiceHttpPort();
//獲取介面
int addResult = portType.add(1, 3);
System.out.println(addResult);
}
❻ java invoke的用法. 獲取一個對象的所有get方法。再用invoke到另一個對象的set方法中,怎麼寫。
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Xx {
/**
* @param args
*/
public static void main(String[] args) {
//所有public方法
Method[] ms = A.class.getMethods();
for (int i = 0; i < ms.length; i++) {
if(ms[i].getName().startsWith("get"))
//get方法
;
}
try {
//set方法
Method setMethod = A.class.getMethod("setXxx", Object.class);
//set值,根據具體參數類型來,可多個
Object setValue = new Object();
setMethod.invoke(new A(), setValue);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class A {
}
❼ java 中 invoke()的作用是什麼
invoke(調用)就是調用Method類代表的方法。可以實現動態調用,例如可以動態的傳人參數,可以把方法參數化。
可以把方法參數化invoke(class, method),比如Test類里有一系列名字相似的方法setValue1、setValue2等等,可以把方法名存進數組v[],然後循環里invoke(test,v[i]),就順序調用了全部setValue。
此外,invoke()對帶有指定參數的指定對象調用,個別參數被自動解包,與基本形參相匹配,基本參數和引用參數都隨需服從方法調用轉換。如下
public Object invoke(Object obj,Object... args)
throws IllegalAccessException,
IllegalArgumentException,
InvocationTargetException
如果底層方法是靜態的,那麼可以忽略指定的obj參數。該參數可以為 null。
如果底層方法所需的形參數為 0,則所提供的args數組長度可以為 0 或 null。
如果底層方法是實例方法,則使用動態方法查找來調用它,這一點記錄在 Java Language Specification, Second Edition 的第 15.12.4.4 節中;在發生基於目標對象的運行時類型的重寫時更應該這樣做。
如果底層方法是靜態的,並且尚未初始化聲明此方法的類,則會將其初始化。
如果方法正常完成,則將該方法返回的值返回給調用者;如果該值為基本類型,則首先適當地將其包裝在對象中。但是,如果該值的類型為一組基本類型,則數組元素不被包裝在對象中;換句話說,將返回基本類型的數組。如果底層方法返回類型為 void,則該調用返回 null。

(7)invokejava擴展閱讀:
語言特點
1.簡單性
Java看起來設計得很像C++,但是為了使語言小和容易熟悉,設計者們把C++語言中許多可用的特徵去掉了,這些特徵是一般程序員很少使用的。例如,Java不支持go to語句,代之以提供break和continue語句以及異常處理。
2.分布性
Java設計成支持在網路上應用,它是分布式語言。Java既支持各種層次的網路連接,又以Socket類支持可靠的流(stream)網路連接,所以用戶可以產生分布式的客戶機和伺服器。
網路變成軟體應用的分布運載工具。Java程序只要編寫一次,就可到處運行。
3.編譯和解釋性
Java編譯程序生成位元組碼(byte-code),而不是通常的機器碼。Java位元組碼提供對體系結構中性的目標文件格式,代碼設計成可有效地傳送程序到多個平台。Java程序可以在任何實現了Java解釋程序和運行系統(run-time system)的系統上運行。
❽ 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);
}
}

❾ 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"}});
}
}
