发表于: 2017-09-13 23:36:51

3 741


今天完成的事:

1.Spring的相关语法和概念

通过学习了解了Spring有两种配置方式,一种是传统的一个或多个xml文件作为配置文件,一种是3.0版本后支持的以注解的形式来配置


在今天的学习中主要还是学习了如何通过xml文件来配置

xml配置文件由命名空间和命名空间内的配置信息构成,Java自带命令空间十种,其中Beans是Spring中最核心和原始的命名空间

在今天的学习中也明白了如何通过命名空间Beans来声明一个Bean,格式如下:

其中id在Spring的容器所有Bean中必须唯一,class是注明了该Bean是哪个类


在今天的学习中也明白了如何通过构造器注入,举例下面为我的核心代码(主要是通过该类来输出一些需要输出的内容)

下面是一个主类,启动我的核心代码用于输出内容

其中ApplicationContext实例是Spring应用上下文,该应用上下文对象加载了配置文件config.xml,随后调用该应用上下文对象的getBean方法获取了一个ID为test的Bean(其实可以理解为通过反射来创建了一个实现了接口SaySomeThing接口的HelloWorld对象,并根据xml配置文件中声明的对该对象进行相关操作后返回(例如依赖注入)

下面为config.xml,将值“Hello-Spring”通过构造器注入了,若我们上图中的主类,会输出注入的值

<constructor-arg>元素主要用于构造器注入,上图中的HelloWorld类有个构造函数,参数是一个String,因此在此通过value属性就将对应的值通过构造器注入了。如果构造器注入对的是值可以通过“value”属性,Spring会自动转换为对应的数据类型,若注入的是Bean,必须使用"ref"属性,且ref属性中的Bean的ID是已经在配置文件中存在的

运行结果为:



除了构造器注入,还了解了在一些情况下一些下比如某个类的构造方法是私有的,而通过提供一个静态方法每次返回相同的实例,因此无法通过构造器注入来创建和配置Bean,因此必须使用工厂方法创建Bean

下图中的代码构造方法是私有的,因此无法使用构造器注入,只提供了静态方法每次返回相同的实例。

使用Spring的构造器注入是无法创建该Bean的,因此只能使用工厂方法创建Bean,<bean>元素有一个factory-method属性,允许我们调用一个指定的静态方法,从而代替构造方法创建一个类的实例。可以像下图的配置来使用factory-method

运行结果为:


Bean的作用域,所有的Spring Bean默认都是单例。怎么讲呢,当容器分配一个Bean时(不论分配这个Bean对少次)返回的都是一个实例(就好比售票,你只有一张票,所有买票人得到的号码都是一样的,对于第一位购买者可能不会有影响,但是后面的所有人都会被指控伪造)。

有时候我们可能想要每次都要返回不同的实例,那么只需要将Bean的属性scope改为"prototype"就可以了,如下图所示

scope的属性不单单只有prototype,还有几种值,各自的作用各有不同


初始化和销毁Bean,有时候当实例化一个Bean时,我们需要执行一些初始化操作包确保该Bean可用(比如从数据库下载必要的计算数据),在销毁一个Bean时也需要执行一些清除等工作(比如将计算结果上传数据库)。为满足初始化和销毁Bean的需求,Spring提供了Bean声明周期的钩子方法。

只需要使用init-method和destroy-method参数来配置<bean>元素即可。init-method指定了实例化前需要执行的初始化方法,destroy-method指定了销毁实例前需要指定的方法。下图展示了如何使用init-method和destroy-mthod

明天计划的事情:

继续学习Spring

遇到的问题:

目前都是一些简单的语法和概念,还没遇到不理解的

收获:

对于网络上对Spring作用的定义和书中所讲述的作用感到很空,并不能感同身受。通过学习Spring的一些概念和语法以及手动编写书中的小实例,让我稍微对Spring框架有了一点理解,觉得是在消除重复代码和解耦让核心的组件减少依赖(让核心的应用组件只关注于它的自身逻辑和实现,不被第三方接口或类变得臃肿和复杂)


返回列表 返回列表
评论

    分享到