`
Clazz
  • 浏览: 915 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

通过注解注入对象使用.annotationType().getDeclaredMethods()得到

 
阅读更多
Person类
package com.introspector;

public class Person {
	private String name;
	private int age;
	private boolean gender;
	
	public boolean isGender() {
		return gender;
	}
	public void setGender(boolean gender) {
		this.gender = gender;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}


PersonDao类
package com.introspector;

public class PersonDao {
	private Person person;

	public Person getPerson() {
		return person;
	}
	
	@Injection(name="张一", age=11, gender=false)
	public void setPerson(Person person){
		this.person = person;
	}
}


Injection类

package com.introspector;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface Injection {

	String name();

	int age();
	
	boolean gender() default true;

}



TestDemo类

		//得到PersonDao上person的属性描述器
		PropertyDescriptor pd = new PropertyDescriptor("person", PersonDao.class);
		Class clazz = pd.getPropertyType();
		Object p = clazz.newInstance();
		Method writeMethod = pd.getWriteMethod();
		
		Injection injection = writeMethod.getAnnotation(Injection.class);
                  //injection.annotationType返回的是interface com.introspector.Injection 接口再直接得到注解接口对应的方法
		Method[] methods = injection.annotationType().getDeclaredMethods();
		Field f = null;
		for(Method m : methods){
                           //直接往person的属性中注入
			f = p.getClass().getDeclaredField(m.getName());
			f.setAccessible(true);
			f.set(p, m.invoke(injection, null));
		}
		
		PersonDao pdo = new PersonDao();
		writeMethod.invoke(pdo, p);
		System.out.println(pdo.getPerson().getAge());
		System.out.println(pdo.getPerson().getName());
		System.out.println(pdo.getPerson().isGender());
分享到:
评论

相关推荐

    day021-反射和注解笔记和代码.rar

    作用:通过元注解了解其他注解的使用特点,还可以自定义注解 2.元注解: 1. @Target @Target 作用 用来限制被修饰注解的使用范围,即注解可以在类的哪些成员上使用 ...

    java中Class.getMethods()和Class.getDeclaredMethods()方法的区别

    Java 中 Class.getMethods...使用 getMethods() 方法时需要注意的是,它返回的是该类以及超类的公共方法,而使用 getDeclaredMethods() 方法时需要注意的是,它返回的是该类本身自己声明的方法,而不包括超类中的方法。

    反射与注解PPT学习教案.pptx

    - **运行时处理**:框架如Spring可以利用注解自动配置对象,比如`@Autowired`进行依赖注入。 - **源码生成**:注解处理器(Annotation Processor)可以在编译时生成源码或资源文件,例如`@Generated`标记自动生成的...

    java 通过反射获取类上注解,方法上注解,注解里的值及方法参数

    对于有成员值的注解,可以使用`Annotation`对象的`annotationType().getDeclaredMethods()`来获取成员方法,然后调用这些方法来获取值。例如,对于注解`@MyAnnotation(value="test")`,可以这样获取值: ```java ...

    注解+ 反射实例demo

    自定义注解需要定义一个接口,该接口继承自`java.lang.annotation.Annotation`。例如: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation....

    jface开发的几个包都在里面了

    at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Unknown Source) at java.lang.Class.getMethod0(Unknown Source) at java.lang.Class.getMethod...

    java简单方法顺序调用注解

    在Java中,注解通过`@AnnotationName`的形式来声明,它们本身不直接影响程序的执行,但可以用于代码的验证、编译时的检查、运行时的行为修改等。 标题中的“java简单方法顺序调用注解”是指使用注解来控制类中方法...

    自定义Annotation注解

    本教程将通过一个简单的自定义Annotation注解示例——`CustomAnnotationDemo`,帮助新手了解如何创建和使用自定义注解。 首先,让我们看看如何定义一个自定义注解。在Java中,注解的定义使用`@interface`关键字。...

    Java元注解.pdf

    元注解自身也是注解,但它们的作用对象不是代码元素(如类、方法、变量等),而是其他的注解。通过元注解,我们可以控制注解的可见性、生命周期以及在编译过程或运行时如何处理这些注解。 1. **@Target**: 这个元...

    Java基础之注解+反射.docx

    - 注解常用于框架开发,如Spring框架的依赖注入、事务管理等都大量使用了注解。 - 反射在框架开发、插件系统、单元测试、序列化、动态代理等领域有广泛应用,如Hibernate ORM框架使用反射操作数据库,JUnit测试...

    深入理解 Java注解及实例

    import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; ...

    Java注解开发

    - 说明:上述代码定义了一个名为 `CustomAnnotation` 的注解,它可以在方法上使用,并且有一个名为 `value` 的成员,默认值为空字符串。 2. **使用注解**:将自定义的注解应用到程序元素上。 - 示例: ```java ...

    自定义运行期注解

    import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface TimedExecution { String value() default "default"; } ``` ...

    frida反射调用对象中的方法与字段.pdf

    当需要使用反射调用某个对象的方法或访问其字段时,可以通过Frida的`Java.use`方法获取到对应的类的代理对象,然后通过调用其方法来实现。例如,在Frida脚本中可以使用`classObject.getDeclaredField("fieldName")....

    Android 手写EventBus,ButterKnife=动态代理+注解+反射

    在ButterKnife中,我们使用注解如`@BindView`来标记视图,然后通过注解处理器(如ButterKnife.Zelezny或APT)在编译时自动生成绑定代码。这样,我们可以在运行时避免使用`findViewById`,提高代码的可读性和效率。 ...

    反射类使用.rar

    - **框架和库**:Spring框架中的依赖注入,MyBatis中的SQL映射,以及各种测试框架(JUnit, TestNG)都广泛使用反射技术。 总之,这个压缩包中的“反射Test”和“反射”文件可能包含了如何创建、访问和修改类、方法...

    反射+Class+获取和操作+入门

    通过反射,开发者可以动态地创建对象、调用方法、访问字段,甚至处理注解和泛型。Class类是Java反射机制的核心,它代表了运行时的类信息。本资源将引导初学者了解如何使用反射和Class类进行类的获取和操作。 首先,...

    深度解析Java中的5个“黑魔法”完整源代码

    通过`Class`类和`java.lang.reflect`包中的其他类,我们可以实现对对象的元数据操作。例如,以下代码展示了如何使用反射创建对象并调用其方法: ```java public class ReflectionDemo { public void printMessage...

    自定义注解

    在Java编程语言中,注解(Annotation)是一种元数据,它提供了向编译器或JVM提供附加信息的方式。自定义注解允许开发者创建自己的元数据类型,以便为代码添加特定的语义或自动化处理。在给定的"自定义注解"示例中,...

    java自定义注解\标签库\监听\junit简单测试

    创建自定义注解涉及到定义注解类型、注解处理器以及使用注解。 1. 定义注解类型:使用`@interface`关键字来创建一个新的注解,比如: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) ...

Global site tag (gtag.js) - Google Analytics