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());
分享到:
相关推荐
作用:通过元注解了解其他注解的使用特点,还可以自定义注解 2.元注解: 1. @Target @Target 作用 用来限制被修饰注解的使用范围,即注解可以在类的哪些成员上使用 ...
Java 中 Class.getMethods...使用 getMethods() 方法时需要注意的是,它返回的是该类以及超类的公共方法,而使用 getDeclaredMethods() 方法时需要注意的是,它返回的是该类本身自己声明的方法,而不包括超类中的方法。
- **运行时处理**:框架如Spring可以利用注解自动配置对象,比如`@Autowired`进行依赖注入。 - **源码生成**:注解处理器(Annotation Processor)可以在编译时生成源码或资源文件,例如`@Generated`标记自动生成的...
对于有成员值的注解,可以使用`Annotation`对象的`annotationType().getDeclaredMethods()`来获取成员方法,然后调用这些方法来获取值。例如,对于注解`@MyAnnotation(value="test")`,可以这样获取值: ```java ...
自定义注解需要定义一个接口,该接口继承自`java.lang.annotation.Annotation`。例如: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation....
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中,注解通过`@AnnotationName`的形式来声明,它们本身不直接影响程序的执行,但可以用于代码的验证、编译时的检查、运行时的行为修改等。 标题中的“java简单方法顺序调用注解”是指使用注解来控制类中方法...
本教程将通过一个简单的自定义Annotation注解示例——`CustomAnnotationDemo`,帮助新手了解如何创建和使用自定义注解。 首先,让我们看看如何定义一个自定义注解。在Java中,注解的定义使用`@interface`关键字。...
元注解自身也是注解,但它们的作用对象不是代码元素(如类、方法、变量等),而是其他的注解。通过元注解,我们可以控制注解的可见性、生命周期以及在编译过程或运行时如何处理这些注解。 1. **@Target**: 这个元...
- 注解常用于框架开发,如Spring框架的依赖注入、事务管理等都大量使用了注解。 - 反射在框架开发、插件系统、单元测试、序列化、动态代理等领域有广泛应用,如Hibernate ORM框架使用反射操作数据库,JUnit测试...
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; ...
- 说明:上述代码定义了一个名为 `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的`Java.use`方法获取到对应的类的代理对象,然后通过调用其方法来实现。例如,在Frida脚本中可以使用`classObject.getDeclaredField("fieldName")....
在ButterKnife中,我们使用注解如`@BindView`来标记视图,然后通过注解处理器(如ButterKnife.Zelezny或APT)在编译时自动生成绑定代码。这样,我们可以在运行时避免使用`findViewById`,提高代码的可读性和效率。 ...
- **框架和库**:Spring框架中的依赖注入,MyBatis中的SQL映射,以及各种测试框架(JUnit, TestNG)都广泛使用反射技术。 总之,这个压缩包中的“反射Test”和“反射”文件可能包含了如何创建、访问和修改类、方法...
通过反射,开发者可以动态地创建对象、调用方法、访问字段,甚至处理注解和泛型。Class类是Java反射机制的核心,它代表了运行时的类信息。本资源将引导初学者了解如何使用反射和Class类进行类的获取和操作。 首先,...
通过`Class`类和`java.lang.reflect`包中的其他类,我们可以实现对对象的元数据操作。例如,以下代码展示了如何使用反射创建对象并调用其方法: ```java public class ReflectionDemo { public void printMessage...
在Java编程语言中,注解(Annotation)是一种元数据,它提供了向编译器或JVM提供附加信息的方式。自定义注解允许开发者创建自己的元数据类型,以便为代码添加特定的语义或自动化处理。在给定的"自定义注解"示例中,...
创建自定义注解涉及到定义注解类型、注解处理器以及使用注解。 1. 定义注解类型:使用`@interface`关键字来创建一个新的注解,比如: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) ...