zoukankan      html  css  js  c++  java
  • 面试中怎么回答Spring IOC,AOP

    你对spring的理解?

    答:spring最重要的两个机制就是IOC控制反转和AOP面向切面编程。
    IOC容器获取对象是程序在加载xml配置文件时通过反射调用构造函数来
    创建对象(我们开始学就是在xml里配置的),讲到控制反转就要讲它的依赖注入模式,
    DI依赖注入是控制反转的一个具体例子,
    在xml文件中依赖注入机制是通过ref属性将其他bean放到当前bean对象,
    注入方式有通过配置xml文件注入和注解注入,
    在xml文件里注入 :属性注入(property)、构造器注入(constructor-arg)、自动装配通过对bean的autowrite属性指定(byName、byType)
    注解注入 :有autowrite、resource、component等

    @Autowired和@Resource两个注解的区别:
        1)、@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
        2)、@Autowired是Spring的注解,@Resource是J2EE的注解,

    关于IOC大家可以去看看知乎里面的回答,Spring IoC有什么好处呢? - Mingqi的回答 - 知乎 https://www.zhihu.com/question/23277575/answer/169698662
    Spring IoC有什么好处呢? - Eric的回答 - 知乎 https://www.zhihu.com/question/23277575/answer/24259844
    ioc的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处。第一,资源集中管理,实现资源的可配置和易管理。第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度。

    • IOC(控制反转),将类的创建和依赖关系写配置文件里,由配置文件注入,实现了松耦合。传统的创建对象的方法是直接通过 new 关键字,而 spring 则是通过 IOC 容器来创建对象,也就是说我们将创建对象的控制权交给了 IOC 容器。IOC 让程序员不再关注怎么去创建对象,而是关注与对象创建之后的操作,把对象的创建、初始化、销毁等工作交给spring容器来做。

    (软件设计中的“耦合”指,两个功能函数之间的依赖程度。比如,你设计的一个程序,需要你编写10个功能函数来实现。如果这10个功能中,有9个功能都要调取第10个功能函数X10,那么,当你在修改X10时,你就要考虑修改完成后,是否会对其它9个功能函数有影响,为了查看是否有不好影响,你就要对其它9个功能函数,一个一个进行测试。所以,为了避免产生这种后期修改的劳动量。就提倡【松耦合】,就是,功能函数之间,尽量依赖程度不要太高。否则,修改完一个底层函数后,会对多个上层函数,进行大量的测试。)

    • 依赖注入(DI机制)(依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者)
    • AOP(Aspect-Oriented Programming面向层面的编程)将安全、事务等,于逻辑相对独立的功能抽取出来,利用spring的配置文件将这些功能插进去,实现了按照切面编程,提高了复用性。Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开,
      AOP简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。AOP中的jdk动态代理是通过反射机制实现的,还有一个是CGLIB动态代理。(Spring AOP的底层实现有两种方式:一种是JDK动态代理,另一种是CGLib的方式)

              Spring AOP中的JDK和CGLib动态代理哪个效率更高?
              https://blog.csdn.net/xlgen157387/article/details/82497594

    spring主要由以下几个模块组成:

    • Spring Core:核心类库,提供IOC控制反转服务;也称核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
    • Spring Context:提供框架式的Bean访问方式,以及企业级功能;
    • Spring AOP;AOP面向切面编程;
    • Spring DAO:对JDBC的抽象,JDBCDAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
    • Spring ORM:对现有的ORM框架的支持;
    • Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传;
    • SpringMVC:提供面向Web应用的Model-View-Controller实现;
  • 相关阅读:
    iOS
    WKWebview 获取网页加载内容的高度
    iPhoneXS、XS Max与iPhoneXR 适配
    iOS:iPhone X,iPhone XS,iPhone XR,iPHone XS Max 适配
    git---全局设置用户名、密码、邮箱
    iOS 拖动手势(UIPanGestureRecognizer)
    ios 扩大button的点击区域
    iOS总结 | 修改button响应区域的各种姿势
    swift常用第三方库
    《从零开始学Swift》学习笔记(Day 33)——属性观察者
  • 原文地址:https://www.cnblogs.com/lhh666/p/11406388.html
Copyright © 2011-2022 走看看