簡單模擬IOC容器:為添加了@Autowired的屬性賦值(初始值)


創建@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初始值為""所以第一行為空)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM