欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

这也算是我们的重点 昆山软件定制开发 吧 processBeanDefinition(ele

点击: 次  来源:昆山软开发 时间:2017-12-03

原文出处: JavaDoop

Spring 最重要的观念是 IOC 和 AOP,本篇文章其实就是方式导各人来阐明下 Spring 的 IOC 容器。既然各人平时都要用到 Spring,怎么可以欠好好相识 Spring 呢?阅读本文并不能让你成为 Spring 专家,不外必然有助于各人领略 Spring 的许多观念,辅佐各人排查应用中和 Spring 相关的一些问题。

阅读发起:读者至少需要知道怎么设置 Spring,相识 Spring 中的各类观念,少部门内容我还假设读者利用过 SpringMVC。本文要说的 IOC 总体来说有两处处所最重要,一个是建设 Bean 容器,一个是初始化 Bean,假如读者以为一次性看完本文压力有点大,那么可以按这个思路分两次消化。读者不必然对 Spring 容器的源码感乐趣,也许附录部门先容的常识对读者有些许浸染。

我回收的源码版本是 4.3.11.RELEASE,算是 5.0.x 前较量新的版本了。为了低流浪度,本文所说的所有的内容都是基于 xml 的设置的方法,实际利用已经很少人这么做了,至少不是纯 xml 设置,不外从领略源码的角度来看用这种方法来说无疑是最符合的。假如读者对注解方法的源码感乐趣,也许等我有时间的时候可以写篇文章先容先容。

我但愿能将此文写成一篇 Spring IOC 源码阐明的好文章,但愿通过本文可以让读者不恐惊阅读 Spring 源码。

为了保持文章的严谨性,假如读者发明我那边说错了请必然不惜指出,很是但愿可以听到读者的声音。

引言

先看下最根基的启动 Spring 容器的例子:

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationfile.xml");
}

以上代码就可以操作设置文件来启动一个 Spring 容器了,请利用 maven 的小同伴直接在 dependencies 中加上以下依赖即可,我较量阻挡那些不知道要添加什么依赖,然后把 Spring 的所有相关的对象都加进来的方法。

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.3.11.RELEASE</version>
</dependency>

spring-context 会自动将 spring-core、spring-beans、spring-aop、spring-expression 这几个基本 jar 包带进来。
多说一句,许多开拓者入门就直接打仗的 SpringMVC,对 Spring 其实不是很相识,Spring 是渐进式的东西,并不具有很强的侵入性,它的模块也分别得很公道,纵然你的应用不是 web 应用,可能之前完全没有利用到 Spring,而你就想用 Spring 的依赖注入这个成果,其实完全是可以的,它的引入不会对其他的组件发生斗嘴。

空话说完,我们继承。ApplicationContext context = new ClassPathXmlApplicationContext(…) 其实很好领略,从名字上就可以猜出一二,就是在 ClassPath 中寻找 xml 设置文件,按照 xml 文件内容来构建 ApplicationContext。虽然,除了 ClassPathXmlApplicationContext 以外,我们也尚有其他构建 ApplicationContext 的方案可供选择,我们先来看看概略的担任布局是怎么样的:

这也算是我们的重点 昆山软件定制开拓 吧 processBeanDefinition(ele

读者可以大抵看一下类名,源码阐明的时候不至于找不着看哪个类,因为 Spring 为了适应各类利用场景,提供的各个接口都大概有许多的实现类。对付我们来说,就是揪着一个完整的分支看完。虽然,读本文的时候读者也不必太担忧,每个代码块阐明的时候,我城市汇报读者我们在说哪个类第几行。
我们可以看到,ClassPathXmlApplicationContext 兜兜转转了良久才到 ApplicationContext 接口,同样的,我们也可以利用绿颜色的 FileSystemXmlApplicationContext 和 AnnotationConfigApplicationContext 这两个类。

FileSystemXmlApplicationContext 的结构函数需要一个 xml 设置文件在系统中的路径,其他和 ClassPathXmlApplicationContext 根基上一样。

AnnotationConfigApplicationContext 是基于注解来利用的,它不需要设置文件,回收 java 设置类和各类注解来设置,是较量简朴的方法,也是局面所趋吧。

不外本文旨在辅佐各人领略整个构建流程,所以抉择利用 ClassPathXmlApplicationContext 举办阐明。

我们先来一个简朴的例子来看看怎么实例化 ApplicationContext。

首先,界说一个接口:

public interface MessageService {
    String getMessage();
}

界说接话柄现类:

public class MessageServiceImpl implements MessageService {

    public String getMessage() {
        return "hello world";
    }
}