zoukankan      html  css  js  c++  java
  • Spring-1-IOC

    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

      

  • 相关阅读:
    看完让你彻底搞懂Websocket原理
    将map中的value赋值给list,list改变为什么会引起map也变呢?
    eclipse创建maven 3.1版本maven项目
    eclipse 集成mybatis-generator 生成mybatis 文件
    IDEA错误:Cannot start compilation: the output path is not specified for module "XXX".
    IDEA内存优化(秒开的快感!!)
    实体类反向生成数据库表SQL
    基于idea新建maven项目并发布tomcat
    Netty概念之 Future 和 Promise
    Java检测死锁之ThreadMXBean
  • 原文地址:https://www.cnblogs.com/gnwzj/p/11079879.html
Copyright © 2011-2022 走看看