ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

模拟IOC容器:为添加了@Autowired的属性赋值(初始值)

2020-01-17 23:04:38  阅读:238  来源: 互联网

标签:java String Autowired 初始值 UserInfo import IOC public


创建@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初始值为”“所以第一行为空)

标签:java,String,Autowired,初始值,UserInfo,import,IOC,public
来源: https://www.cnblogs.com/yimengxianzhi/p/12207814.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有