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