創建@Autowired注解
package com.zzj.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //設置范圍和生存周期 @Target({ElementType.TYPE,ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Autowired { }
創建UserInfo並且為添加了@Autowired的成員變量賦值
package com.zzj.test; import java.lang.reflect.Field; import java.util.Date; //UserInfo類含有兩個成員變量 class UserInfo{ @Autowired private Date birth; @Autowired private String name; public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public String getName() { return name; } public void setName(String name) { this.name = name; } } //給有AutoWired注釋的成員變量賦值 public class Test { public static void main(String[] args)throws Exception{ Class clazz = UserInfo.class; //反射創建userinfo對象 Object object = clazz.newInstance(); //獲取成員變量 Field[] fields = clazz.getDeclaredFields(); for(Field field: fields){ //獲取成員變量上的注釋,如果有autowired注釋則賦初始值 Autowired autowired = field.getAnnotation(Autowired.class); if(autowired != null){ //獲取成員變量的類型 clazz = field.getType(); //調用類型的默認構造方法String是"",Date是當前時間 Object value = clazz.newInstance(); //私有成員變量解鎖權限 field.setAccessible(true); //設置初始值, field.set(object, value); } } //類型強轉,並輸出確認結果 UserInfo ui = (UserInfo)object; System.out.println(ui.getName()); System.out.println(ui.getBirth()); } }
輸出結果如下(由於String初始值為""所以第一行為空)