面试题:AOP与IOC 实现

IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是 依赖注入 DI:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系,调用setter方法来注入(反射的话太消耗性能)。他们的依赖关系只在使用的时候才建立。简单来说就是不需要总是NEW一个对象了,只需要一个或多个对象(由你定义的策略决定,一般是单例),统一由容器进行管理。 

AOP:面向切面,是一种编程思想,是对OOP面向对象的补充和完善。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。 实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行(jdk动态代理:必须至少实现一个接口,底层利用反射机制,效率较低;cglib动态代理:原理是使用ASM字节码技术对指定的业务类生成一个子类,并覆盖业务方法实现代理,采用继承的方式,所以不能对final修改的类进行代理二是采用静态代理的方式,代码中显示地实现一个业务实现类的指定代理,在代理类中对同名的业务方法进行包装(不修改原有的业务代码),用户通过代理类调用被包装过的业务方法,但会导致代码冗余。目前这几种代理方式并没有高低之分,只是应用的场景不同。

Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。 
AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便。

猜你喜欢

转载自blog.csdn.net/wangpeng322/article/details/84561365