代理过于简单,不解释了
package activebind;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import zhaole609.BindClass;
import myannotation.MyProperty;
public class ButtonFrame extends JFrame {
@MyProperty
private JButton blueButton=new JButton("blue");
@MyProperty
private JButton redButton=new JButton("red");
@MyProperty
private JButton greenButton=new JButton("green");
private JPanel panel;
private JPanel bpanel;
public ButtonFrame(){
panel=new JPanel();
bpanel=new JPanel();
panel.setSize(300,200);
panel.setBackground(Color.blue);
this.getContentPane().setLayout(new BorderLayout());
this.add(panel,BorderLayout.CENTER);
this.add(bpanel,BorderLayout.SOUTH);
bpanel.add(blueButton);
bpanel.add(redButton);
bpanel.add(greenButton);
this.setSize(300,300);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
changeBackGround();
}
public void changeBackGround(){
try {
BindClass.LookupAndBindFieldMethoid(this);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
new ButtonFrame();
}
}
package myannotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyProperty {
}
package zhaole609;
import java.awt.event.ActionListener;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import myannotation.MyProperty;
public class BindClass {
public static void LookupAndBindFieldMethoid(Object o) throws Exception{
Field[] fields=o.getClass().getDeclaredFields();
for(Field field : fields){
if(field.getAnnotation(MyProperty.class)!=null){
field.setAccessible(true);
bindMethod(field.get(o));
}
}
}
public static void bindMethod(Object ob) throws Exception{
InvocationHandler handler=new InvocationHandler(){
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("before");
Object result= method.invoke(proxy,null);
System.out.println("after");
return result;
}
};
Object proxyObj=Proxy.newProxyInstance(ob.getClass().getClassLoader(),new Class[]{ActionListener.class},handler);
Method method=ob.getClass().getMethod("addActionListener",new Class[]{ActionListener.class});
method.invoke(ob,proxyObj);
}
}
分享到:
相关推荐
Core.Java基础教程 13.高级编程-反射、动态代理与Annotation
NULL 博文链接:https://chaoyi.iteye.com/blog/2086950
反射、Annotation与aop技术文档 反射、Annotation与aop技术文档,
使用Annotation和反射实现Bean转SQL语句Demo
利用java反射和annotation 实现数据库的连接
基于annotation的aop实现 动态代理理念(study content Aspect)
Java annotation 什么是java annotation?annotation 的7种标注类型。nnotation提供了一条与程序元素关联任何信息或者任何元数据(metadata...annotation类型是一种接口,能够通过java反射API的方式提供对其信息的访问。
NULL 博文链接:https://dolphin-ygj.iteye.com/blog/548314
Spring Annotation
struts2 使用Annotation配置实现的小例子,转载供大家学习使用,里面包括了所需的jar包
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-1.2.pom;...
@androidx.annotation.NonNull 缺失的兼容、androidx.annotation兼容包
javax.annotation-3.0.jar javax.annotation-3.0.jar javax.annotation-3.0.jar
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...
赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.3.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-...
Annotation核心技术Annotation核心技术Annotation核心技术Annotation核心技术Annotation核心技术Annotation核心技术
JavaPoet+Annotation实现android动态权限申请 JavaPoet+Annotation实现android动态权限申请
annotation详解 讲解annotation的使用 教程