代理过于简单,不解释了
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);
}
}
分享到:
相关推荐
本例中,我们关注的是注解式AOP,它更加简洁且易于使用。 在Spring中,我们可以通过定义一个带有`@Aspect`注解的类来创建一个切面。这个类通常包含一系列的通知(advice),比如`@Before`、`@After`、`@Around`等,...
`DynamicAndStaticProxy.rar`这个压缩包文件所包含的知识点主要围绕着动态代理、静态代理、注解以及反射这四个核心概念,它们在简化代码、提高可维护性和扩展性方面扮演着重要角色。以下将对这些知识点进行详细阐述...
6. **反射与动态代理**:反射允许在运行时检查类的结构,创建和操作对象。动态代理则可以在运行时生成代理对象,用于拦截方法调用。这些高级特性在插件系统、AOP(面向切面编程)等领域有广泛应用。 7. **Java...
7. 动态代理:Java提供两种动态代理方式,即JDK动态代理和CGLIB代理,常用于AOP(面向切面编程)框架,实现如日志、事务控制等功能。 8.IO/NIO:Java的I/O流体系和NIO(非阻塞I/O)模块,对于高性能网络编程和大...
8. **反射**:反射允许程序在运行时动态地获取类的信息并操作对象。它在插件系统、序列化和动态代理等领域有广泛应用。 9. **泛型**:泛型提高了代码的类型安全性和重用性。学习者需要理解泛型类、泛型方法和通配符...
8. **反射机制**:Java反射机制允许我们在运行时动态地获取类的信息并操作类的对象。这在处理插件系统、序列化、动态代理等方面非常有用。 9. **泛型**:Java的泛型提高了代码的类型安全性和可读性。实例可能展示了...
11. **反射**:反射机制允许在运行时动态地获取类的信息并操作对象。它在插件系统、序列化、动态代理等方面有广泛应用。 12. **Java注解(Annotation)**:注解提供了一种元数据机制,可以为编译器或运行时环境提供...
7. **反射API**:Java反射机制允许在运行时动态访问类的信息,如类名、属性和方法,这在插件系统、动态代理等领域非常有用。 8. **网络编程**:Java提供了Socket编程接口,用于创建客户端和服务器端的网络应用程序...
此外,Java的反射机制允许我们在运行时动态地获取类的信息并操作对象。这在插件开发、动态代理等领域有着广泛应用。我们还将接触到Java的注解(Annotation),它为元数据提供了一种结构化的声明方式。 最后,我们...
这在某些高级应用场景,如动态代理、元数据获取等中非常有用。 12. **注解(Annotation)**:注解提供了一种向编译器或运行时系统提供元数据的方式。代码实例可能包括自定义注解和注解处理器的使用。 以上只是部分...
8. **反射API**:利用反射动态调用方法、获取类信息、创建对象,理解其在程序设计中的应用。 9. **网络编程**:Socket编程,TCP和UDP通信,以及HTTP协议的简单实现。 10. **文件与目录操作**:文件的读写、复制、...
8. **反射**:反射机制允许程序在运行时检查类的信息(如类名、方法名)并动态调用。这在插件系统、序列化、动态代理等方面很有用。 9. **注解(Annotation)**:注解提供了一种元数据的方式,可以用来标注代码,供...
10. **反射**:Java的反射机制允许我们在运行时动态地获取类的信息并操作对象,这对于插件开发、序列化和动态代理等场景非常有用。 11. **泛型**:泛型提供了一种在编译时检查类型安全的方法,可以减少强制类型转换...
8. **反射机制**: 动态加载类、获取类信息、创建对象、调用方法等,为实现元编程提供支持。 9. **泛型**: 了解泛型的使用,提高代码的类型安全性和可读性。 10. **枚举类型**: 使用enum关键字定义枚举,以及枚举类...
第1部分(2个程序包) HelloWorld.zip 01.Java入门...javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性
看到那些要积分的很不酸,发布免费版本。...javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性
看到很多人都分卷打包的,下载很是不方便,还浪费积分...javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性