Spring源码解析2

Posted ruijiege

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring源码解析2相关的知识,希望对你有一定的参考价值。

在上个版本中我们能够实现一些基础的功能我们需要改进的地方

1.添加Autowired注解及实现

package cn.jiedada.spring;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Autowired {
    boolean required() default true;
}

添加注解效仿Spring源码

我们需要思考的是在什么时候赋值进去

坑定是createBean的时候所以需要在添加反射方法像对象中获取值

public Object createBean(String beanName,BeanDefinition beanDefinition){
        Class clazz = beanDefinition.getClazz();
        Object instance = null;
        try {
            instance = clazz.newInstance();

            //依赖注入
            //clazz.getDeclaredFields()获取类中的字段
            for (Field field : clazz.getDeclaredFields()) {
                //通过反射的方式
                if (field.isAnnotationPresent(Autowired.class)) {
                    String name = field.getName();
                    Object bean = getBean(name);
                    field.setAccessible(true);
                    field.set(instance,bean);
                }
            }
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return instance;
    }
View Code

 

以上是关于Spring源码解析2的主要内容,如果未能解决你的问题,请参考以下文章

Spring源码解析——如何阅读源码

转spring源码解析

Spring源码解析-默认标签解析-2

Spring Boot自动配置源码解析(基于Spring Boot 2.0.2.RELEASE)

AOP源码解析---Spring源码从入门到精通(十九)

Java注解及其原理以及分析spring注解解析源码