沈阳中联做网站,启博微分销系统,支付宝网站设计分析,建筑行业网Spring中的AOP与IOC 1.前言2.Spring AOP#xff08;面向切面编程#xff09;2.1 AOP的实现过程2.2 AOP代理模式的类型2.2.1JDK的动态代理2.2.2CGLIB的动态代理 2.3AOP应用常见场景2.3.1日志记录 2.4对AOP的理解 3.Spring IOC#xff08;Inversion of Control#xff0c;控… Spring中的AOP与IOC 1.前言2.Spring AOP面向切面编程2.1 AOP的实现过程2.2 AOP代理模式的类型2.2.1JDK的动态代理2.2.2CGLIB的动态代理 2.3AOP应用常见场景2.3.1日志记录 2.4对AOP的理解 3.Spring IOCInversion of Control控制反转3.1使用Spring IOC 的好处3.2使用Spring IOC 依赖注入的方式3.2.1通过xml文件注入3.2.2通过注解注入 3.3IOC的理解 4.参考 文章所属专区 日积月累 1.前言
本文主要针对Spring中两大特性AOP和IOC,并针对他们的使用常见结合面试常见问题实现代码进行解析。
2.Spring AOP面向切面编程
在使用Java语言进行代码编写时由于Java语言的特性会有一些弊端比如在处理一些不具有继承关系的一些类的公共行为时只能在每个对象引用公共行为会出现大量重复代码会造成大量代码冗余这样不仅浪费时间也不方便维护AOP的出现解决了这一个问题。
2.1 AOP的实现过程
Spring中的AOP基于代理模式首先会自定义一个注解 其次定义一个切面Aspect类在切面中定义切点和通知切点方法的拦截规则在使用了这个注解的方法会被拦截下来拦截下来之后 最后可以进行前置通知、后置通知、异常通知、返回通知还是环绕通知等。
2.2 AOP代理模式的类型
代理类可以分为两类 动态代理Dynamic Proxy和静态代理Static ProxySpring AOP面向切面编程中主要是运用了动态代理的方式来实现在运行过程中通过反射机制动态创建而成无需手动编写代码。
2.2.1JDK的动态代理
JDK动态代理是Spring AOP默认使用的方式主要用于对实现了接口的类生成代理。JDK动态代理主要涉及到java.lang.reflect包中的两个类Proxy和InvocationHandler。InvocationHandler是一个接口通过实现该接口定义横切逻辑并通过反射机制调用目标类的代码动态将横切逻辑和业务逻辑编制在一起。Prox则利用InvocationHandler动态创建一个符合某一接口的实例生成目标类的代理对象
2.2.2CGLIB的动态代理
CGLIBCode Generation Library是针对类实现代理的主要是对指定的类生成一个子类覆盖其中的方法继承。CGLIB是一个强大的高性能高质量的代码生成类库可以在运行期扩展Java类与实现Java接口。CGLIB封装了asm可以再运行期动态生成新class
2.3AOP应用常见场景
比如日志记录性能优化权限控制内容传递错误处理事务管理限流等。
2.3.1日志记录
在Spring AOP中可以使用AspectJ注解定义一个切面然后在切面方法中添加Before或After注解用于在方法执行前后插入相应的日志记录逻辑
2.4对AOP的理解
AOP是Spring框架中最核心的两个点之一它可以减少重复代码降低模块间的耦合性提高代码的可操作性和可维护性。在实际工作中除了业务代码之外还经常会接触到与业务无关的一些组件比如日志权限事务等常见的核心服务组件如果为每个业务代码单独添加这些组件会出现大量的冗余代码因此我们将这些公共的代码逻辑抽象出来成为一个切面然后注入到具体业务中去。AOP就是通过这样一种方式通过动态代理的方式来对需要注入切面的对象进行代理在进行调用时直接将公共逻辑添加进去而不需要修改原有的业务代码在不改变原有业务代码的情况下做了代码功能的增强。
3.Spring IOCInversion of Control控制反转
在传统的软件设计过程中通常由调用者来创建被调用者的实例。但在Spring中创建被调用者的工作不在由调用者来完成这就是控制反转。IOC是一种设计思想即把原本在程序中手动创建对象的控制权交给了Spring框架中的IOC容器让它去创建和管理这些对象。在Spring中实现IOC主要依靠DI(Dependency Injection 依赖注入) 来实现。
3.1使用Spring IOC 的好处
在 Spring 中 IoC 容器是 Spring 用来实现 IoC 的载体 IoC 容器实际上就是个 MapkeyvalueMap 中存放的是各种对象。
由于资源不再由使用资源的双方管理因此资源可以集中管理实现资源的可配置和易管理降低了使用资源双方的依赖程度低耦合度。
3.2使用Spring IOC 依赖注入的方式
3.2.1通过xml文件注入
属性注入property、构造器注入constructor-arg、自动装配通过对bean的autowrite属性指定byName、byType
3.2.2通过注解注入
这种方式后来在 SpringBoot 中常用 autowrite resource component等
3.3IOC的理解
IOC 控制反转: 在没有使用IOC容器之前都是由程序员来控制对象而有了IOC容器之后则由IOC容器来控制对象 控制的是实现过程中所需要的对象以及依赖的对象 在没有使用IOC之前我们都需要主动在对象中创建依赖的对象这种正转的而有了IOC之后依赖的对象由IOC创建后注入到对象中,由主动创建变成了被动接受这是反转; IOC是一种思想DI依赖注入把对应的属性的值注入到对象是具体的实现方式 AutoWried IOC 容器Spring用来实现IOC的载体实际是个Map(Key,value),Map中存放的是各种对象 在Spring中一般存在三级缓存singletonObject存放完整的Bean对象,整个Bean的生命周期从创建到使用到销毁全部都由容器来控制。 4.参考
谈谈对IOC的理解 Spring AOP的理解与使用 面试被问了几百遍的 IoC 和 AOP 还在傻傻搞不清楚
给个三连吧 谢谢谢谢谢谢了