`
zhaole609
  • 浏览: 342869 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

annotation,反射,动态代理小例

 
阅读更多

 

 

 

代理过于简单,不解释了

 

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

 

分享到:
评论

相关推荐

    利用 spring annotation AOP 反射 记录日志

    本例中,我们关注的是注解式AOP,它更加简洁且易于使用。 在Spring中,我们可以通过定义一个带有`@Aspect`注解的类来创建一个切面。这个类通常包含一系列的通知(advice),比如`@Before`、`@After`、`@Around`等,...

    DynamicAndStaticProxy.rar

    `DynamicAndStaticProxy.rar`这个压缩包文件所包含的知识点主要围绕着动态代理、静态代理、注解以及反射这四个核心概念,它们在简化代码、提高可维护性和扩展性方面扮演着重要角色。以下将对这些知识点进行详细阐述...

    Java实效编程百例(Java实效编程百例)

    6. **反射与动态代理**:反射允许在运行时检查类的结构,创建和操作对象。动态代理则可以在运行时生成代理对象,用于拦截方法调用。这些高级特性在插件系统、AOP(面向切面编程)等领域有广泛应用。 7. **Java...

    Java高级编程百例

    7. 动态代理:Java提供两种动态代理方式,即JDK动态代理和CGLIB代理,常用于AOP(面向切面编程)框架,实现如日志、事务控制等功能。 8.IO/NIO:Java的I/O流体系和NIO(非阻塞I/O)模块,对于高性能网络编程和大...

    Java程序设计100例

    8. **反射**:反射允许程序在运行时动态地获取类的信息并操作对象。它在插件系统、序列化和动态代理等领域有广泛应用。 9. **泛型**:泛型提高了代码的类型安全性和重用性。学习者需要理解泛型类、泛型方法和通配符...

    Java编程百例(全)03-01

    8. **反射机制**:Java反射机制允许我们在运行时动态地获取类的信息并操作类的对象。这在处理插件系统、序列化、动态代理等方面非常有用。 9. **泛型**:Java的泛型提高了代码的类型安全性和可读性。实例可能展示了...

    JAVA 2应用编程150例

    11. **反射**:反射机制允许在运行时动态地获取类的信息并操作对象。它在插件系统、序列化、动态代理等方面有广泛应用。 12. **Java注解(Annotation)**:注解提供了一种元数据机制,可以为编译器或运行时环境提供...

    Java实效编程百例

    7. **反射API**:Java反射机制允许在运行时动态访问类的信息,如类名、属性和方法,这在插件系统、动态代理等领域非常有用。 8. **网络编程**:Java提供了Socket编程接口,用于创建客户端和服务器端的网络应用程序...

    JAVA编程100例

    此外,Java的反射机制允许我们在运行时动态地获取类的信息并操作对象。这在插件开发、动态代理等领域有着广泛应用。我们还将接触到Java的注解(Annotation),它为元数据提供了一种结构化的声明方式。 最后,我们...

    java开发实战1200例(第二卷)代码部分

    这在某些高级应用场景,如动态代理、元数据获取等中非常有用。 12. **注解(Annotation)**:注解提供了一种向编译器或运行时系统提供元数据的方式。代码实例可能包括自定义注解和注解处理器的使用。 以上只是部分...

    JAVA实用编程100例

    8. **反射API**:利用反射动态调用方法、获取类信息、创建对象,理解其在程序设计中的应用。 9. **网络编程**:Socket编程,TCP和UDP通信,以及HTTP协议的简单实现。 10. **文件与目录操作**:文件的读写、复制、...

    Java2程序设计150例(源代码)

    8. **反射**:反射机制允许程序在运行时检查类的信息(如类名、方法名)并动态调用。这在插件系统、序列化、动态代理等方面很有用。 9. **注解(Annotation)**:注解提供了一种元数据的方式,可以用来标注代码,供...

    java案例-80多例_java_

    10. **反射**:Java的反射机制允许我们在运行时动态地获取类的信息并操作对象,这对于插件开发、序列化和动态代理等场景非常有用。 11. **泛型**:泛型提供了一种在编译时检查类型安全的方法,可以减少强制类型转换...

    java程序设计150例

    8. **反射机制**: 动态加载类、获取类信息、创建对象、调用方法等,为实现元编程提供支持。 9. **泛型**: 了解泛型的使用,提高代码的类型安全性和可读性。 10. **枚举类型**: 使用enum关键字定义枚举,以及枚举类...

    java高手真经 光盘源码

    第1部分(2个程序包) HelloWorld.zip 01.Java入门...javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性

    Java高手真经(编程基础卷)光盘全部源码 免积分

    看到那些要积分的很不酸,发布免费版本。...javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性

    Java高手真经(编程基础卷)光盘全部源码

    看到很多人都分卷打包的,下载很是不方便,还浪费积分...javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性

Global site tag (gtag.js) - Google Analytics