【Java面试】Spring中的IOC和AOP

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    IOC/DI

    IOC:控制反转也叫依赖注入。利用了工厂模式
    将对象交给容器管理你只需要在spring配置文件总配置相应的bean以及设置相关的属性让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候spring会把你在配置文件中配置的bean都初始化好然后在你需要调用的时候就把它已经初始化好的那些bean分配给你需要调用这些bean的类假设这个类名是A分配的方法就是调用A的setter方法来注入而不需要你在A里面new这些bean了。

    在传统的程序设计中当调用者需要被调用者的协助时通常由调用者来创建被调用者的实例。但在spring里创建被调用者的工作不再由调用者来完成因此控制反转IoC创建被调用者实例的工作通常由spring容器来完成然后注入调用者因此也被称为依赖注入DI依赖注入和控制反转是同一个概念。

    AOP

    AOP:面向切面编程。Aspect-Oriented Programming
    AOP就是典型的代理模式的体现。
    代理模式是常用的java设计模式他的特征是代理类与委托类有同样的接口代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类以及事后处理消息等。代理类与委托类之间通常会存在关联关系一个代理类的对象与一个委托类的对象关联代理类的对象本身并不真正实现服务而是通过调用委托类的对象的相关方法来提供特定的服务。
    AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候OOP则显得无能为力。
    也就是说OOP允许你定义从上到下的关系但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中而与它所散布到的对象的核心功能毫无关系。在OOP设计中它导致了大量代码的重复而不利于各个模块的重用。
    而AOP则将程序中的交叉业务逻辑比如安全日志事务等封装成一个切面然后注入到目标对象具体业务逻辑中去。
    实现AOP的技术主要分为两大类
    一是采用动态代理技术利用截取消息的方式对该消息进行装饰以取代原有对象行为的执行
    二是采用静态织入的方式引入特定的语法创建“方面”从而使得编译器可以在编译期间织入有关“方面”的代码.
    简单点解释比方说你想在你的biz层所有类中都加上一个打印‘你好’的功能,这时就可以用aop思想来做.
    你先写个类写个类方法方法经实现打印‘你好’,然后Ioc这个类 ref“biz.*”让每个类都注入即可实现。

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
    标签: SpringJava