zoukankan      html  css  js  c++  java
  • 简单模拟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初始值为""所以第一行为空)

  • 相关阅读:
    配置rc.local开机自启动文件的疑问
    linux下使用shell查看apache IP访问量
    linux 查看剩余内存数
    linux ps 命令
    移动端资料大全
    git命令大全
    redis 应用场景
    TP框架中的多种方法代码(C,G,L,T,I,N,D,M,A,R,B,U,W,S,F,E)
    在linux上安装svn
    mysql 分表的实现方式
  • 原文地址:https://www.cnblogs.com/yimengxianzhi/p/12207814.html
Copyright © 2011-2022 走看看