Spring】SpringIoC底层的实现原理是什么?

2021-01-20 20:12发布

2条回答
我的网名不再改
2楼 · 2021-01-21 16:34

传统开发方式:
UserService us=new UserServiceImpl();
us.say();

OCP原则:

open-程序具有扩展性;close-程序的修改尽量减少关闭;

Spring IOC实现思路:

//创建一个工厂类,通过工厂类创建UserService接口的实现类UserServiceImpl对象,这样减少接口和实现类的耦合性。
//工厂+反射+配置文件(bean)

class Factory{

  `  public static UserService getObject(){`
       ` return new UserServiceImpl();`
   ` }`

}
UserService userService=Factory.getObject();
userService.say();

在Application.xml中

`

IOC(控制反转),将原来在程序中手动创建对象UserService对象的控制权,交由Spring框架管理。
简单的说,就是创建UserService对象的控制权被反转到Spring框架啦
DI(依赖注入),就是在Spring创建这个对象的过程中,将这个对象所依赖的属性注入进去。


小张同学
3楼 · 2021-01-25 14:05

一、传统方式的开放

比如定义一个接口的实现类:
UserService us = new UserService();
该方式没有体现面向接口编程的思想。

二、面向接口编程

UserService us = new UserServiceImpl();
在web层中创建service层(业务层)的实现类,使得web层与service层产生了耦合;
并没有遵守ocp原则

OCP原则

即open-close原则:对程序的扩展是open的,对修改程序代码是close的。
尽量做到不修改程序的源码,实现对程序的扩展。

三、工厂模式

创建一个工厂类,通过工厂类来创建service接口的实现对象。

image.png

但是如果实现类发现变化,还是需要修改FactoryBean类中的代码,由此可见还是存在耦合,该方案仍然存在不足;

四、工厂+反射+配置文件

(1)先在配置文件中配置一个bean,如

(2)通过向工厂类方法中传入id值,解析XML文件,通过id找到对应的bean

image.png

再通过class名,利用Java的反射机制生成对应的class类,从而完成解耦。


相关问题推荐

  • 回答 1

    log方法的参数有问题?

  • 回答 5
    已采纳

    1、相同点(1)都是表现层框架,都是基于MVC设计模型(2)底层都离不开 Servlet API(3)处理请求的机制都是一个核心控制器2、不同点(1)SpringMVC的入口是Servlet,而Struts2的入口是Filter(2)SpringMVC是基于方法设计的,而Struts2是基于类(3)SpringMV...

  • 回答 4

    有五种自动装配的方式,可以用来指导 Spring 容器用自动装配方式来进行依赖注入。no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。第 402 页 共 485 页byName:通过参数名 自动装配,Spring 容器在配置文件中发现 bean的 autowire 属性被...

  • 回答 16

    是一样的,new的方式也可以,但是这样做就是控制连接资源分配了,要么比较占内存,大量访问的时候让服务器负载过大

  • 回答 2

    1.单例顾名思义:一个个排队过... 高访问量的时候,你能想象服务器的压力了... 而且用户体验也不怎么好,等待太久~2.实质上这种理解是错误的,Java里有个API叫做ThreadLocal,spring单例模式下用它来切换不同线程之间的参数。用ThreadLocal是为了保证线程安全...

  • 回答 2

    不要死记硬背,理解每一个含义,代表啥意思,就行了,现在流行的springboot是零配置的,开箱即用

  • Spring是什么?Spring 2020-08-11 16:10
    回答 7
    已采纳

    Spring是一个非常活跃的开源框架;它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Spring提倡最少侵入,这也就意味着你可以适当的时候安装或卸载Spring.优势:1.方便解耦,简化开发...

  • 回答 3
    已采纳

    轻量:Spring 是轻量的,基本的版本大约2MB。控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。容器:Spring 包含并...

没有解决我的问题,去提问