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.