자바 반사 추출 류 정보,동적 에이전트 및 필터 링 방법 설명
7524 단어 자바 반사
package org.rui.classts.reflects;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.regex.Pattern;
/**
*
* @author lenovo
*
*/
//{args:ShowMethods}
//
public class ShowMethods {
private static String usage="usage:showMethod qualified.class.mane";
private static Pattern p=Pattern.compile("\\w+\\.");
public static void main(String[] args) throws ClassNotFoundException {
//System.out.println(args[0]+" : "+args[1]);
args=new String[1];
args[0]="org.rui.classts.reflects.ShowMethods";
//args[1]="java.awt.Color";
if(args.length<1)
{
System.out.println(usage);
System.exit(0);
}
int lines=0;
Class<?> c=Class.forName(args[0]);
Method[] m=c.getMethods();
Constructor[] constructor=c.getConstructors();
if(args.length==1)
{
for(Method mt:m)
{
//System.out.println("tostring:"+mt.toString());
// xx.ss.
System.out.println("m1:"+
p.matcher(mt.toString()).replaceAll("")
);
}
//----------------------------------------
for(Constructor con:constructor)
System.out.println("c1:"+
p.matcher(con.toString()).replaceAll("")
);
lines=m.length+constructor.length;
}
else
{
for(Method mt:m)
{
if(mt.toString().indexOf(args[1])!=-1)
{
System.out.println("m2:"+
p.matcher(mt.toString()).replaceAll("")
);
lines++;
}
}
//----------------------------------------
for(Constructor con:constructor)
{
if(con.toString().indexOf(args[1])!=-1)
{
System.out.println("c2:"+
p.matcher(con.toString()).replaceAll("")
);
lines++;
}
}
}
}
}
package org.rui.classts.reflects;
/**
*
* @author lenovo
*
*/
interface Interface
{
void doSomething();
void somethingElse(String arg);
}
//class------------------
class RealObject implements Interface{
public void doSomething() {
System.out.println("RealObject doSomething");
}
public void somethingElse(String arg) {
System.out.println("RealObject somethingElse:"+arg);
}
}
//class-SimpleProxy-----------------
class SimpleProxy implements Interface{
private Interface proxied;
public SimpleProxy(Interface proxied){this.proxied=proxied;}
//method
public void doSomething() {
System.out.println("SimpleProxy doSomething");
proxied.doSomething();
}
public void somethingElse(String arg) {
System.out.println("SimpleProxy somethingElse:"+arg);
proxied.somethingElse(arg);
}
}
public class SimpleProxyDemo {
public static void consumer(Interface inta)
{
inta.doSomething();
inta.somethingElse("bonobo");
}
//main----------
public static void main(String[] args)
{
//Interface o=new RealObject();
//
consumer(new RealObject());
//
consumer(new SimpleProxy(new RealObject()));
}
}
package org.rui.classts.reflects;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//DynamicProxyHandler
class DynamicProxyHandler implements InvocationHandler{
private Object proxied;
public DynamicProxyHandler(Object proxied)
{
this.proxied=proxied;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("proxy:=="+proxy.getClass()
+"
method:=="+method
+"
args:"+args);
if(args!=null)
for(Object o:args)
System.out.println("arg:"+o);
// proxied
return method.invoke(proxied, args);
}
}
class SimpleDynamicProxy{
public static void consumer(Interface iface)
{
iface.doSomething();
iface.somethingElse("bonobo==");
}
public static void main(String[] args) {
RealObject robj=new RealObject();
consumer(robj);
//
// , 。
Interface proxy=(Interface) Proxy.newProxyInstance(
Interface.class.getClassLoader(), //
new Class[]{Interface.class},//
new DynamicProxyHandler(robj)//
);
consumer(proxy);
}
}
package org.rui.classts.reflects;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
*
* @author lenovo
*
*/
class MethodSelector implements InvocationHandler
{
private Object obj;
public MethodSelector(Object o){this.obj=o;}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
//System.out.println("proxy:"+proxy.getClass().getSimpleName());
//
if(method.getName().equals("interesting"))
{
System.out.println("proxy detected the interesting method");
}
return method.invoke(obj, args);
}
}
// interface
interface SomeMethod
{
void boring1();
void interesting(String arg);
void boring2();
void boring3();
}
//------------------------------
class Implementation implements SomeMethod
{
public void boring1()
{
System.out.println("boring1");
}
public void interesting(String arg)
{
System.out.println("interesting:"+arg);
}
public void boring2()
{
System.out.println("boring2");
}
public void boring3()
{
System.out.println("boring3");
}
}
//
public class SelectingMethods {
public static void main(String[] args)
{
//
SomeMethod proxy =(SomeMethod)Proxy.newProxyInstance(
SomeMethod.class.getClassLoader(), //
new Class[]{SomeMethod.class},//
new MethodSelector(new Implementation())//
);
proxy.boring1();
proxy.boring2();
proxy.interesting("bonobo");
proxy.boring3();
}
}
대조 테스트
package org.rui.classts;
import org.rui.classts.chilnd.*;
public class PetCount4 {
public static void main(String[] args) {
Pet p=new Dog();
Class c=Pet.class;
Class c1=Dog.class;
Class c2=Cat.class;
//
if(p instanceof Dog){
System.out.println("true");
}else System.out.println("fales");
//class
if(c.isInstance(p)){
System.out.println("true");
}else System.out.println("fales");
// class class
if(c.isAssignableFrom(c1)){
System.out.println("true");
}else System.out.println("fales");
if(c2.isAssignableFrom(c1)){
System.out.println("true");
}else System.out.println("fales");
System.out.println("c==c1:"+(c==c1));
System.out.println("c.equals(c1:"+(c.equals(c1)));
System.out.println("c==Pet.class:"+(c==Pet.class));
System.out.println("c.equals(Pet.class:"+(c.equals(Pet.class)));
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 리 플 렉 션 관련 및 예시자바 리 플 렉 션 과 관련 된 것 은 네 개의 final 유형의 클래스 클래스 클래스, Method, Field, Constructor 이다.자바 의 모든 종류의 부모 클래스 Object 입 니 다.그 중에서 Cl...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.