Spring的IOC,属性注入,bean的理解

什么是IOC

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

 IOC: Inversion of Control(控制反转)。
 控制反转:将对象的创建权反转给(交给)Spring。

Spring IOC的实践

在这里插入图片描述
核心部分红框就是springIOC的内容,包括bean,core,context工厂的内容
在这里插入图片描述
原本我们面向接口编程能更好的扩展程序,但是接口和实现类联系太紧密,想把dao的实现类换成别的实现类便要把程序里面的UserDaoImpl都要改成别的,若使用这个实现类越多,修改的源代码就越多,好的程序设计遵循OCP原则,尽量少改动源代码,通过工厂设计模式的实现,现在要修改实现类只需要对配置文件做出修改就好,其中bean标签的工作原理如红色代码所示,所以以后修改UserDaoImpl只需要在配置文件修改就好。
在这里插入图片描述

IOC和DI

 IOC:控制反转,将对象的创建权反转给了Spring。
 DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。就是spring在帮我们创建这个类的实例当中,发现这个类中有一个属性,帮我们把这个属性设置进来。

在这里插入图片描述
在这里插入图片描述
String就是这个类,name就是这个属性

 面向对象的时候
 依赖
Class A{

}

Class B{
public void xxx(A a){

}
}
 继承:is a
Class A{

}
Class B extends A{

}

 聚合:has a
有许多的对象,缺某一个也不会影响。

Spring的工厂类

Spring的工厂类
Spring工厂类的结构图

在这里插入图片描述
1.4.1.2 BeanFactory :老版本的工厂类
 BeanFactory:调用getBean的时候,才会生成类的实例。就是下图getBean
在这里插入图片描述
ApplicationContext :新版本的工厂类
 ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化。new的时候已经将它实例化
 ApplicationContext有两个实现类
 ClassPathXmlApplicationContext :加载类路径下的配置文件(一般就放在工程下面)
 FileSystemXmlApplicationContext :加载文件系统下的配置文件,就是你放在本机磁盘哪里

老版本的工厂类与新版本的用法是一样的。

Spring的配置

XML标签的配置提示
Schema的配置
在这里插入图片描述
1.5.2.1 标签的id和name的配置
 id :使用了约束中的唯一约束。里面不能出现特殊字符的。不然不知道实例的是谁。可以换成name
在这里插入图片描述

 name :没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。
 Spring和Struts1框架整合的时候,就不能使用id了

1.5.2.2 Bean的生命周期的配置(了解)

 init-method :Bean被初始化的时候执行的方法
 destroy-method :Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)
在这里插入图片描述
在这里插入图片描述
在application.xml配置

Bean的作用范围的配置(重点)

 scope :Bean的作用范围:

 singleton :默认的,Spring会采用单例模式创建这个对象。你没有做任何配置的情况下。不管有多少个程序调用,只会new一次。
在这里插入图片描述

在这里插入图片描述

 prototype :多例模式。(Struts2和Spring整合一定会用到),用一次就new一个实例。(Struts2和Spring整合一定会用到)
在这里插入图片描述
在这里插入图片描述
现在dao1跟dao2的对象是不同的,而且也不会被销毁,因为工厂被创建了多个,不知道要销毁哪个

 request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
 session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
 globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。就像登陆了qq一样,qq的子应用便不用再次登陆。如果没有这种环境,它的作用就跟session一样。

Spring的属性注入

在这里插入图片描述
构造方法的方式的属性注入
在这里插入图片描述

Set方法的方式的属性注入
在这里插入图片描述

Set方法设置对象类型的属性
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

P名称空间的属性注入(Spring2.5以后)

 通过引入p名称空间完成属性的注入:
 写法:
 普通属性 p:属性名=”值”
 对象属性 p:属性名-ref=”值”
 P名称空间的引入
在这里插入图片描述
在这里插入图片描述

SpEL的属性注入(Spring3.0以后)

Spring Expression Language,Spring的表达式语言。
在这里插入图片描述
可以直接用特定格式引入别的类的属性

集合类型属性注入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分模块配置

在加载配置文件的时候,加载多个
在这里插入图片描述
在一个配置文件中引入多个配置文件
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值