IOC与DI的区别?

  IOC:控制反转(Inversion of Control是面向对象的一种设计原则,可以用来降低计算机之间的耦合度,其中最常见的是依赖注入).是实现的目标

  DI:是实现IOC的一种手段Dependency Injection ,依赖注入简称DI

  DL:依赖查找 Dependency Lookup,使用场景,数据库配置。

Dependency Injection依赖注入

  依赖:需要、基于。

  注入:进行解耦,需要的时候再进行使用

spring实现IOC的思路和方法
  spring实现IOC的思路是提供一些配置信息用来描述类之间的依赖关系,然后由容器去解析这些配置信息,继而维护好对象之间的依赖关系,前提是对象之间的依赖关系必须在类中定义好,比如A.class中有一个B.class的属性,那么我们可以理解为A依赖了B。既然我们在类中已经定义了他们之间的依赖关系那么为什么还需要在配置文件中去描述和定义呢?
spring实现IOC的思路大致可以拆分成3点

  1应用程序中提供类,提供依赖关系(属性或者构造方法)

  2把需要交给容器管理的对象通过配置信息告诉容器(xml、annotation,javaconfig)

  3把各个类之间的依赖关系通过配置信息告诉容器

  配置这些信息的方法有三种分别是xml,annotation和javaconfig
  维护的过程称为自动注入,自动注入的方法有两种构造方法和setter
  自动注入的值可以是对象,数组,map,list和常量比如字符串整形等
 
spring编程的风格
  schemal-based----基于模型---xml
  annotation-based---基于注解--annotation
  java-based---基于java-java Configuration
 
spring的注入方法
  构造方法
  set方法
  spring3中提供了接口注入,但是在spring4中被取消了,太不人性化。已经取消了
  取消的原因:有了set方式注入,接口注入就多次一举了,并且耦合度也提高了 https://blog.csdn.net/xuebing1995/article/details/75389143
  
 
spring中注解@component与@service、@controller的区别
  官网中有详细解释:Spring提供进一步典型化注解:@Component@Service,和 @Controller@Component是任何Spring管理组件的通用构造型。@Repository@Service和,@Controller@Component更具体的用例的专业化(分别在持久性,服务和表示层)。因此,您可以来注解你的组件类有 @Component,但是,通过与注解它们@Repository@Service或者@Controller ,你的类能更好地被工具处理,或与切面进行关联。例如,这些刻板印象注释成为切入点的理想目标。@Repository@Service并且@Controller还可以在Spring Framework的未来版本中携带其他语义。因此,如果您在使用之间进行选择@Component或者@Service对于您的服务层,@Service显然是更好的选择。同样,如前所述,@Repository已经支持将其作为持久层中自动异常转换的标记。
 
spring中的@autowirter与@resource的区别
  autowriter是默认的byType方式,如果根据byType没有找到,会根据byName去查找。如果spring容器中存在多个此类型的类则会根据byName查找,byName是根据属性的名字去查找对应的类。如果根据属性名字没有查找到相关则会报错,提示存在多个相同类型的类。
  resource是默认的byName方式,是根据属性的名字创建代理类中的方法。切记不是set方式
  什么是byType?就是spring基于类的类型通过上下文查找对象依赖。(个人理解,若理解错误请及时指出)
  什么是byName?就是spring基于方法名字查找对象依赖中的方法。(个人理解,若理解错误请及时指出)
  扩展:根据官网所说,我们可以重写BeanNameGenerator类,并重新设置spring中查找上下文中的依赖关系的命名规范。
 
bean的作用域
  此点本人再开发工作过程中确实遇到过,简单说一下经历。项目是改造项目,由很老的项目改造成springMVC项目,项目中的架构师没有处理bean的作用域,默认的(也就是singleton),本人在工作过程中遇到签单逻辑的时候,服务启动后,第一次签单成功,但是第二次之后总是失败,于是就打了断点,发现进入逻辑方法后,所有的全局属性都是有值的(刚刚进入方法,还没赋值),结果查找问题,发现bean的作用于问题导致。
  singleton、prototype、request、session、application、websocket

  

Spring-1-IOC的更多相关文章

  1. Spring的IOC和AOP之深剖

    今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...

  2. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  3. Spring总结—— IOC 和 Bean 的总结

    一.Spring 官方文档中给出的 Spring 的整体结构. 二.我自己所理解的 Spring 整体结构图. 三.本次总结 Spring 核心部分 1.从上面图中可以看出,Beans 和 Conte ...

  4. spring的IOC和AOP

     spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...

  5. spring容器IOC创建对象<二>

    问题?spring是如何创建对象的?什么时候创建对象?有几种创建方式?测试对象是单例的还是多例的 ?对象的初始化和销毁? 下面的四大模块IOC的内容了!需要深刻理解 SpringIOC定义:把对象的创 ...

  6. Spring中IoC的入门实例

    Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...

  7. Spring中IOC和AOP的详细解释

    我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC就是典型的工厂模式,通过s ...

  8. Spring的IoC应用

    IoC(Inversion of Control,控制反转) Spring的IoC应用是其框架的最大的特点,通过依赖注入可以大大降低代码之间的耦合度,从而实现代码和功能之间的分离.在代码中可以不直接和 ...

  9. Spring 实践 -IoC

    Spring 实践 标签: Java与设计模式 Spring简介 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转) ...

  10. 挖坟之Spring.NET IOC容器初始化

    因查找ht项目中一个久未解决spring内部异常,翻了一段时间源码.以此文总结springIOC,容器初始化过程. 语言背景是C#.网上有一些基于java的spring源码分析文档,大而乱,乱而不全, ...

随机推荐

  1. B - Soldier and Badges

    Time Limit:3000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Description Colone ...

  2. 自定义HTML中select控件

    HTML中默认的select控件比较难看,大家可以参考,本文提供一种解决思路,当然也可以用CSS实现. function selectInit(tid,isIn){ if(!$("#&quo ...

  3. (水题)洛谷 - P1598 - 垂直柱状图

    https://www.luogu.org/problemnew/show/P1598 忘记读取后清空数组,也不知道准确的长度. #include<bits/stdc++.h> using ...

  4. [原]Windows下openssl的下载安装和使用

    安装openssl有两种方式,第一种直接下载安装包,装上就可运行:第二种可以自己下载源码,自己编译.下面对两种方式均进行详细描述. 一.下载和安装openss 方法一:直接使用openssl安装包 W ...

  5. C++开发工程师面试题库 50~100道

    51. New delete 与malloc free 的联系与区别?答案:都是在堆(heap)上进行动态的内存操作.用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对 ...

  6. HDU6038:Function(循环群/节+找公式)

    传送门 题意 给出一个\(0\sim n-1\)的排列a,一个\(0\sim {m-1}\)的排列b,询问满足\[f(i)=b_{f(a_i)}~~(0\le i\le n-1)\]的函数的个数 分析 ...

  7. hdoj1789【贪心】

    题意: 已知有n个作业,每个作业呢,都是一天可以做完,每个作业都有一个截止日期,每个作业如果超过他的截止日期会扣分,最后让你求一个怎么安排求得一个最小扣的分数. 比如现在有3个作业 截止日期:3 3 ...

  8. c++ const的使用

    const是用来声明一个常量的,当你不想让一个值被改变时就用const,const int max && int const max 是没有区别的,都可以.不涉及到指针const很好理 ...

  9. 洛谷 P2261 [CQOI2007]余数求和 ||整除(数论)分块

    参考:题解 令f(i)=k%i,[p]表示不大于p的最大整数f(i)=k%i=k-[k/i]*i令q=[k/i]f(i)=k-qi如果k/(i+1)=k/i=qf(i+1)=k-q(i+1)=k-qi ...

  10. archive log full ora-00257

    ############# sample 0 asmcmd show free 37G in archive_log ASMCMD> lsdgState Type Rebal Unbal Sec ...