• DI(依赖注入) 和IOC(控制反转)都是一种设计思想,要理解他们,让我们从coding中的一些痛点入手。

    • 依赖注入 Dependency Injection :

如果A类要使用B类的一个方法,首先必须拥有B类的实例的引用,其次,在调用B类方法时,引用必须被B类的实例赋值,否则空指针。对于面对对象的java语言来说,这一场景,是极具备普遍性,的重复劳动。

所以Spring根据配置(或注解)帮我们把对象A、B、C....构造好,放到容器中,并基于配置的reference关系,帮我们完成大量的赋值操作。

早起版本采用xml配置,后面为了简化配置工作以及进一步解耦合,采用注解来定义关系。

    • 控制反转 Inversion of control:

有了依赖注入,控制反转就更好理解了。对A类中引用的其他类资源的初始化以及选择,由Spring框架帮助控制。

  • AOP(切面编程) 则是Spring框架服务端应用架构的一种设计和实现方案

要理解这个概念,还是要从设计的实际需求出发。当我们需要在某一些类型(某一层)的处理操作前做一些操作,又不破坏当前的代码调用链路(通常说业务代码无感知),那么就需要AOP了。例如,我们在service层常见的统一开启事务、权限过滤、加性能日志,比较经典的 ehcache 基于注解实现缓存也是一种切面。

  • AOP 开发和一些基本概念:

    • 切面(Aspect):

       @Aspect //将spring的Component  (ComponentDemoAA)声明成一个切面

      @Component // 切面本身是个Sping bean

      public class ThisisAAspect(){...}

    • 切入点(Pointcut):在ComponentDemoAA中定义一个方法作为接入点

@Pointcut(value="execution(* com.AspectTest.service.personServerImpl.*(..))")

private void thisIsaPointCut(){}

    • 通知(Advice): 有多种类型

在ComponentDemoAA中定义若干个方法作为通知对象执行

@Around(value="thisIsaPointCut()")  // 环绕

private void doSomeThing1(){}

还可以是:

@Before(value="thisIsaPointCut()")  // 前置

@AfterThrowing(value="thisIsaPointCut()",throwing="ex")//异常处理

@After(value="thisIsaPointCut()")  // 后置

@AfterReturning(value="thisIsaPointCut()")  最终

    • @Order 标识切面的优先级,越小优先级越高
    • 织入(Weaving) 运行时,会通过动态代理将 切面织入调用链路
    • 动态代理  Spring 中可以配置使用 JDK动态代理 还是 CGLIB 动态代理
  • xml中增加配置 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

Spring 基础知识(一)基本概念 DI、IOC、AOP的更多相关文章

  1. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  2. Spring 基础知识

    Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻 ...

  3. spring 基础知识复习

    spring是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式. 组成spring框架的每个模块(或组件)都可单独存在 ...

  4. Spring基础知识及bean的配置

    IOC与DI: IOC(inversion of control):其思想是反转资源获取的方向.传统的资源查找方式要求组件向容器发起请求查找资源.作为回应,容器适时的返回资源.而应用了IOC之后,则是 ...

  5. JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  6. Spring的俩大核心概念:IOC、AOP

    1.Spring 有两个核心部分: IOC 和 Aop (1)IOC:控制反转,把创建对象过程交给 Spring 进行管理   (2)Aop:面向切面,不修改源代码进行功能增强 2.Spring 特点 ...

  7. Spring基础知识详解

    Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring ...

  8. Spring基础知识之依赖注入

    Spring框架的四大原则: 1)使用POJO进行轻量级和最小侵入式的开发. 2)通过依赖注入和基于接口编程实现松耦合. 3)通过AOP和默认习惯进行声明式编程. 4)使用AOP和模板(templat ...

  9. 1.spring基础知识讲解

    引言:以下记录一些自己在使用时pringle框架时的一些自己心得合成体会时,如有侵权,请联系本博主. 1. spring基本都使用 spring是一个开源的轻量级框架,其目的是用于简化企业级应用程序开 ...

随机推荐

  1. Linux操作系统的VI命令

    Linux操作系统的VI命令 VI是Linux系统的一个文本编辑器,该编辑器可以通过使用VI命令来操作,从而完成对文本的编辑.熟练掌握一些常用的VI命令,可以大大简化编辑操作并提高操作Linux文本的 ...

  2. IOS高级开发之多线程(五)NSOperation 2

    接着看NSOperation.NSOperationQueue线程间的通信: 应用场景:比如我们经常把一些耗时的操作比如下载图片放在子线程,那么当这个完成之后,我们就需要回到主线程,这个时候就需要用到 ...

  3. C# 说说lock到底锁谁?(1)

    写在前面 最近一个月一直在弄文件传输组件,其中用到多线程的技术,但有的地方确实需要只能有一个线程来操作,如何才能保证只有一个线程呢?首先想到的就是锁的概念,最近在我们项目组中听的最多的也是锁谁,如何锁 ...

  4. Date中before和after方法的使用

    Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false: Date1.before(Date2),当Date1小于Date2时,返回TRUE,当 ...

  5. react项目中实现悬浮(hover)在按钮上时在旁边显示提示

    <i className={classNames({ 'device-icon': true, 'camera-icon': true, 'camera-icon-hover-show-intr ...

  6. react项目中实现元素的拖动和缩放实例

    在react项目中实现此功能可借助 react-rnd 库,文档地址:https://github.com/bokuweb/react-rnd#Screenshot .下面是实例运用: import ...

  7. git 执行pull错误如何撤销

    比如你当前所在的空间是trunk,但是执行了git pull origin branches,这时需要回滚回去,可以用一下步骤: 1.运行git reflog命令查看你的历史变更记录,如下: 69fd ...

  8. curl提交请求时,如何把cookie带过去

    curl请求有一个CURLOPT_COOKIE参数,把获取到的cookie内容,通过字符串组装,赋值给这个参数就可以了 例子:   $defaults = array( CURLOPT_URL =&g ...

  9. python+selenium的web自动化测试之一(手工执行)

    环境 Windows 前提: 1. python已正常安装 2. selenium已正常安装. 如果没安装,会报:ImportError: No module named 'selenium' (参考 ...

  10. LRU算法的Java实现

    LRU全称是Least Recently Used,即最近最久未使用的意思. LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小.也就是说,当限定的空间已 ...