spring最基本的功能-依赖注入/依赖查找。
依赖注入:比如我们平时用到的注解注入@Autowried/@Inject/@Value
依赖查找:applicationContext.getBean()或者是beanFactory.getBean();等
那么我们的依赖到底是保存在什么地方了呢。
来源一:beanFactory/beanDefinitionMap;
来源二:ApplicationContext;
来源三:Environment;
来源一beanFactory主要保存的是spring启动的时候自动加载的beanDefinition对象,这些对象包括@Component/@Service/xml配置的bean信息。在refresh的时候,又会根据beanDefinition实例化bean对象。
来源二applicationContext主要保存了几个单独的游离实例,为什么游离呢,因为这几个实例能通过依赖注入。但是依赖查找查询不到。比如ApplicationContext/BeanFactory/ResourceLoader/ApplicationEventPublisher
来源三:Environment会加载我们的properties文件,在@Value的时候,这些参数都会被注入到bean里面。
上面三个来源能解决大部分依赖。