首页 > 编程语言 > 详细

Spring框架——Ioc、DI与Spring框架

时间:2020-08-22 23:03:21      阅读:113      评论:0      收藏:0      [点我收藏+]

Ioc、DI

引入

实现某功能的方法:

  1. 面向对象
    • 类与类存在调用关系
    • 存在依赖,高耦合
  2. 分离接口
    • 将被调用的类作为接口实现
    • 通过调用接口来调用类
    • 降低耦合度(依赖)
  3. 容器实现
    • 将类与接口的实现类放入容器中,通过容器来获取
    • 实现了解耦
    • 问题:
      • Container容器对所管理的所有组件产生了依赖
      • 类对容器产生依赖,封装具有查找逻辑
  4. 服务定位器 (JNDI)
    • 封装查找逻辑,对外公开查找组件的方法
      • 应用服务定位器将查找逻辑从组件里分离出来
      • 降低组件在查找方面的复杂性
      • 增加组件的重用性
    • 局限性:组件必须知道怎么找资源
  5. 控制反转(根据 3.容器实现 进行Ioc)
    • 不需要服务定位器
    • 由容器将组件注入到另一个组件
    • 完全面向接口

概念

Ioc 控制反转 [Inversion of Control]

目的:设计原则,解耦组件之间的依赖关系。降低耦合度
好处:

  1. 从主动获取资源变成 被动接收
  2. 查找的被动形式

B、C类具有相同的方法、不同的实现。A类需要调用B或C类的方法

  • 主动:A类主动获取B或C的对象,想要谁要谁
  • 被动:容器给A类哪个类,A类就必须用哪个类
    聪明的小伙伴应该已经理解了,没错,就是自由恋爱包办婚姻的区别。

DI 依赖注入 [Dependency Injection]

具体的设计模式,体现Ioc设计原则
DI是Ioc的最典型的实现,不能混用

DI用法

DI 依赖注入的类型

  1. 接口注入
  2. setter注入[Spring实现]
    • 缺点:会忘记注入
    • 抛出空指针
  3. 构造器注入[Spring实现]
    • 避免了setter注入 的缺点
    • 没有明确含义的方法名,对参数位置、数量有要求

流行程度最广

setter注入

框架

什么是框架

已经对基础的代码进行了封装并提供相应的API,开发者在使用框架是直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度。

框架

  • netty
  • mina
  • luence

Spring框架

创作人:Rod Johnson

Spring Ioc容器

Spring容器体现了IoC原理

Spring容器通过读取配置元数据负责对Beans实例化、配置、装配

配置元数据

元数据:通过容器使用配置来反应Beans和他们之间的依赖关系

  1. 基于Xml的配置

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

	<!-- xml配置 -->
	
	<!-- id叫什么都可以 -->
	<!-- class为完整的包名+类名 -->
	<bean id="IntelCpu" class="com.pc.IntelCpu"></bean>
	
	<!-- 依赖注入 -->
	<!-- ref对应依赖注入id -->
	<bean id="Computer" class="com.pc.Computer">
		<property name="cpu" ref="IntelCpu"></property>
	</bean>
	
</beans>
  1. 基于注解的配置

在xml文件中进行注解配置

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
	
	<!-- 注解配置  -->
	<context:annotation-config /> 
	<context:component-scan base-package="com.pc"></context:component-scan>
	
</beans>

在类中加入注解

注解
依赖组件类 @Component
调用依赖类 @Component("Computer")
依赖组件 @Resource

@@Component默认将类名小写,可以通过@Component("Computer")进行自定义

  1. 基于java的配置

注解类的注解不变
在测试类注解

@Configuration
@ComponentScan("包名")

调用

ApplicationContext ac = new AnnotationConfigApplicationContext();
//类 class = (类)ac.getBean("注解的类名字");
//class.方法();

每日英语()

annotation 注解
application 应用
component 组件
config 配置
configuration 配置
context 上下文环境
property 财产、所有权
scan 扫描、浏览

Spring框架——Ioc、DI与Spring框架

原文:https://www.cnblogs.com/occlive/p/13538735.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!