码迷,mamicode.com
首页 > 编程语言 > 详细

Spring 的基本概念以及用xml配置IOC

时间:2020-05-31 12:57:05      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:面向切面编程   依赖   输入参数   面向切面   map   经验   解决   弊端   杂类   

Spring的两大核心概念:

Spring的IOC(依赖反转注入)和Spring的AOP(面向切面编程)

其中,这两者所处的位置(pic1)

 技术图片

 

 

 

Spring的两大优势:
方便解耦

方便AOP

声明式编程

方便测试

方便集成一些优秀的框架

方便使用JAVAEE的API

 

Spring的体系架构:

技术图片

 

Spring IOC 的作用

耦合,可以理解为依赖关系

包括:

1. 类之间的依赖关系

2. 方法之间的依赖关系

解耦,做到:

编译时不依赖,运行时依赖

方法:

1. 采用反射的方式创建对象,避免使用new关键字

2. 读取配置文件来获得全限定类名

 

解决方式1 :采用properties配置

首先我们要创建bean对象:

bean对象是什么,怎么做

 

 

1. properties 是什么

Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型。

2. 怎么用properties配置(https://www.cnblogs.com/xudong-bupt/p/3758136.html)

2.1 初步配置

1)根据x.properties文件load一个Property对象

2)这个Property对象中以键值对的形式存储着你的你想要的类的具体类名

3)用classforName加载

2.2 为了单例模式,把加载过的类储存起来

1)加载一个bean的map类型

2)在静态代码块的时候就把这个map得到

考虑为什么单例是可以的:外部没有需要修改的属性,否则单例在多线程可能会出错

采用IOC如何实现工厂模式

技术图片

 

 

 控制反转:一个类把自己创建类的权利交给了另一个框架(工厂)

也就是这个类只能根据名字创建对象,至于创建出来的对象是不是他想要的那一个,其实是无法控制的,这是由配置文件来决定的

 

具体实现:

技术图片

 

 上图也是ApplicationContext常用的三个实现类:

ClassPathXmlApplicationContext :加载类路径下的配置文件

FileSystem.... :加载磁盘路径下的配置文件

AnnotationConfig... : 基于注解的配置

 

对象是什么时候创建的?

1. 对象在 new 容器的时候创建 —— 更适合单例模式

2. 对象在我们需要用到,也就是根据id去获取的时候创建 —— 更适合多例模式

对于具体实现来说,ApplicationContext接口是1,而更顶层的BeanFactory接口是2

 

 但对于一般使用,用1,因为底层接口往往更加完善,并且我们也可以通过配置实现多例

 

具体来说:

Spring对bean的管理细节

1. 创建bean的三种方式

a.使用默认构造函数(一旦写了自己的构造函数就没法使用)(经验证,不是完全没法使用,是一旦自己写的那个构造函数带输入参数就用不了)(但是可以做到其他的参数配置)

b.使用某个类中的方法创建对象,并存入bean容器

c.使用某个类中的静态方法(则不需要先构造该类本身的实例)技术图片

 

 

2. bean的作用范围

技术图片

3. 生命周期

singleton : 生命周期跟随容器的生命周期,容器生则生,容器死则死

prototype:生命周期跟随引用的机制,当我们需要并把它从factory中取出来后,它就跟随那个引用了,并且等待jvm回收

 

依赖注入:

也就是具体来说怎么创建对象

 1. 构造函数的注入:

前面的默认构造函数注入适用点太少,我们可以添加标签扩展能力

有哪些以及怎么用如下:

技术图片

弊端:初始化的时候不需要的值也被注入了

 

 

 采用set方法注入:

技术图片

弊端:set方法不能保证某个属性一定有值

复杂类型的注入:

技术图片

 

Spring 的基本概念以及用xml配置IOC

标签:面向切面编程   依赖   输入参数   面向切面   map   经验   解决   弊端   杂类   

原文地址:https://www.cnblogs.com/Plorde/p/12494944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!