Java 聊聊Spring框架AOP和IoC

Spring框架

Spring 框架是当前主流的 Java 应用程序开发框架。Spring使Java编程对每个人来说都更快、更简单、更安全。Spring对速度、简单性和生产力的关注使它成为世界上最流行的Java框架。

spring 的优点?

  1. 降低了组件之间的耦合性 ,实现了软件各层之间的解耦 
  2. 可以使用容易提供的众多服务,如事务管理,消息服务等 
  3. 容器提供单例模式支持 
  4. 容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 
  5. 容器提供了众多的辅助类,能加快应用的开发 
  6. spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 
  7. spring属于低侵入式设计,代码的污染极低 
  8. 独立于各种应用服务器 
  9. spring的DI机制降低了业务对象替换的复杂性 
  10. Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 
  11. Spring提供了一致的事务管理接口,可向下扩展到(使用一个单一的数据库,例如)本地事务并扩展到全局事务(例如,使用 JTA)。

AOP

与OOP ( Object Oriented Programming面向对象)对比,传统的OOP开发中的代码逻辑是自上而下在这些之上而下的过程中会产生写横切性的问题。而这些横切性的问题又与我们主业务逻辑关系不大。会散落在代码的各个地方,造成难以维护。

AOP的编程思想就是把这些横切性的问题和主业务逻辑进行分离,从而起到解耦的目的。

基本要素

  1. Aspect(切面)通常是个类,里面可以定义切入点和通知

  2. JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用

  3. Advice(通知):AOP在特定的切入点上执行的增强处理, Before After AfterReturning AfterThrowing Around

  4. Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书 写切入点表达式

  5. AOP代理: AOP框架创建的对象,代理就是目标对象的加强。

底层原理

  1. Java 动态代理

  2. CGLIB 代理

代理对象是接口的时候使用的是Java 动态代理,否则的话使用的是CGLIB

源码分析

IoC

loC(Inversion of Control)也称为依赖注入(dependency injection, DI)。它是一个对象定义依赖关系的过程,也就是说,对象只通过构造函数参数、工厂方法的参数或对象实例构造或从工厂方法返回后在对象实例上设置的属性来定义它们所使用的其他对象。然后容器在创建bean时注入这些依赖项。这个过程本质上是bean本身的逆过程,因此称为控制反转(IoC,通过直接构造来控制其依赖项的实例化。

DI(Dependency Injection) — IOC 的一种实现手段:即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入. 相对于 IOC 而言,这种表述更直接(容器向组件注入资源,方式有:属性注入、构造器注入)

依赖注入的方式

  1. Autowired/resource 等等 (可以再属性、构造器、sertter上标注)

  2. setter方法注入(xml中的利用property标签,实际是调用sertter方法)

  3. 构造器注入

  4. 静态/实例工厂(只找到xml里面的用法)

Spring提供两种容器

序号 容器 & 描述
1 Spring BeanFactory 容器它是最简单的容器,给 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口来定义。BeanFactory 或者相关的接口,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的与 Spring 整合的第三方框架的反向兼容性的目的。
2 Spring ApplicationContext 容器该容器添加了更多的企业特定的功能,例如从一个属性文件中解析文本信息的能力,发布应用程序事件给感兴趣的事件监听器的能力。该容器是由 org.springframework.context.ApplicationContext 接口定义。

 参考:w3cschool.

发布了80 篇原创文章 · 获赞 55 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/cong____cong/article/details/105054286