• Spring源码阅读(一)


    Spring通过配置文件或者注解对类实例进行加载管理。稍微思考,可以猜测spring加载过程肯定先把配置转化为统一的配置对象,再把通过配置对象生产类实例。阅读源码,我们也可以发现这个逻辑。

    spring配置对象类结构

    spring实例生产工厂类结构

    spring bean生产简单例子

    例子中我们简单的使用AnnotatedGenericBeanDefinition读取spring注解配置,DefaultListableBeanFactory生产类实例。

    package com.coshaho.learn.spring;
    
    import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.stereotype.Component;
    
    /**
     * 
     * Spring注解读取.java Create on 2017年10月16日 下午11:07:02    
     *    
     * 类功能说明:   spring小例子
     *
     * Copyright: Copyright(c) 2013 
     * Company: COSHAHO
     * @Version 1.0
     * @Author coshaho
     */
    @Component("coshaho")
    public class Spring注解读取 
    {
        public void sayHello()
        {
            System.out.println("Hello, Spring.");
        }
        
        public static void main(String[] args) throws Exception 
        {
            // 读取spring配置
            AnnotatedGenericBeanDefinition beanDefinition=new AnnotatedGenericBeanDefinition(Spring注解读取.class);
            System.out.println(beanDefinition.getMetadata().getAnnotationTypes());
            System.out.println(beanDefinition.isSingleton());
            System.out.println(beanDefinition.getBeanClassName()); 
            
            // 创建一个BeanFactory
            DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
            
            // 加载配置
            factory.registerBeanDefinition("coshaho", beanDefinition);
            
            // 生产实例
            Spring注解读取 spring = (Spring注解读取) factory.getBean("coshaho");
            spring.sayHello();
        }
    }
    [org.springframework.stereotype.Component]
    true
    com.coshaho.learn.spring.Spring注解读取
    Hello, Spring.
  • 相关阅读:
    本地启动项目后cookie跨域获取不到的处理方式
    相对URL:协议名跨域的一种处理方式
    window.open方法被浏览器拦截的处理方式
    高维前缀和
    比较函数大小
    链式前向星
    并查集
    Kruskal算法
    读书笔记 UltraGrid(4)
    读书笔记 UltraGrid(12)
  • 原文地址:https://www.cnblogs.com/coshaho/p/7679499.html
Copyright © 2020-2023  润新知