Spring

  首先它是一个开源而轻量级的框架。其核心容器的主要组件是Bean工厂(BeanFactory)。Bean工厂使用控制反转(IOC)模式来降低程序代码之间的耦合度,并提供了面向切面编程(AOP)的实现。

  正如其字面意思,是程序员的春天,大大地降低了体力劳动~

  Spring 常用注解

  1、@Component : 组件。标识这是个受 spring 管理的组件。(当组件不好归类时使用)

  2、@Controller:用于标注控制层组件(如 struts 中的 action)。

      使用这个注解,且不指定 value 的时候,默认 bean 的名字为类名首字母小写。

  3、@Service:用于标注业务层组件。

  4、@Repository:用于标注数据访问组件,即DAO组件。

  5、@Scope("prototype") :将Action的范围设置为原型(也就是多例的)。保证每一个请求有一个单独的 Action 来处理,避免 struts 中 Action 的线程问题。

      由于 spring 默认是单例的,这种情况下,只会创建一个 Action 对象,每次访问都是同一个对象,数据不安全。Struts 要求必须是多例的,每次访问对应的不同的 Action 对象。这个注解相当于在 spring 中保证了这一点。

      有问题啊:为什么 spring mvc 又是建议单例的呢?它不担心数据安全吗?  -- 个人理解:我们表现层使用 struts 时建议是多例的原因是,Struts 是通过模型驱动和属性驱动来获取前端页面参数的,Action 里面存在大量成员变量,单例模式会导致属性重复使用,数据不安全。而 spring mvc 获取参数的模式是通过方法形参,一般之作用于方法,故不需要开启多例。

  6、@Autowired:默认按类型进行自动装配。在容器查找匹配的Bean,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中。

  7、@Resource:默认按名称装配,当找不到与名称匹配的bean才会按类型装配。

AOP

    -- Aspect-Oriented Programming 面向切面编程

  前言:我们都知道 Java 是 OOP-面向对象编程的,它有自己的优势,也有自己的不足。比如说:在我们开发中,都会有一条业务主线(即客户的需求)。而我们要做的就是实现这个主线上的需求。我们在实现这些功能的时候,经常要干一些额外的不可避免的事情,比如事务的管理,日志的记录等,就很繁杂且代码量增多。

  所以 Spring 提供了另一种角度来思考程序结构,也就是把这一些事情剥离出来,然后适时适地的把它们加入到我们的代码中,比如说 声明式事务管理的时候,我们在 service 层检测到save*、update*这些方法要被调用的时候,我们先进行开启事务什么的,这就是AOP,面向编程的思想。

  总的来说,在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

  AOP 名词的大白话解说

  1、通知  --  Advice

    就是要给目标类织入的事情。就是我们说的额外的一些共同的事情,也就是上面说的 事务,日志等。你给先定义好,然后在想用的地方用一下。

  2、连接点  -- JoinPoint

    就是 spring 允许你使用通知的地方,那可真就多了,基本每个方法的前,后(两者都有也行),或抛出异常时都可以是连接点,spring 的话只支持方法连接点。和方法有关的前前后后(抛出异常),都是连接点。一个类的所有方法前、后、抛出异常时等都是连接点。

  3、切入点  -- Pointcut

    上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有几十个连接点了对把,但是你并不想在所有方法附近都使用通知(使用叫织入,下面再说),你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。(比如需要开启事务的只是“ save * ”、“ update * ”..等等这些方法)。切入点就是定义了哪个类里面的哪些方法的会得到通知

  4、切面  -- Aspect

    切面是通知和切入点的结合。现在发现了吧,没连接点什么事情,连接点就是为了让你好理解切点,搞出来的,明白这个概念就行了。通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。

  5、织入  -- weaving

    把切面应用到目标对象来创建新的代理对象的过程。可以在编译时、类加载时、运行时完成的织入,spring 采用的是 在运行时完成织入

  6、引入  -- introduction

    允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗~

  7、目标  -- target

    引入中所提到的目标类,也就是要被通知的对象也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。

  8、AOP 的代理  -- AOP Proxy

    目标对象被织入增强后产生的结果类。我的理解它是 spring 为了骗过 jvm 的类型检查,搞出来的一个伪装类。

    spring 伪装采用了两种方式:

    ① 实现和目标类相同的接口  -- 与目标类为双胞胎兄弟(要找我哥办事,弟弟我冒充哥哥收点礼物,再让我哥给你办事~)

    ② 生成子类调用  -- 给目标类当儿子(学会了爸爸的本事,都找我办就好了,但是我要先收点礼物~)

IOC

    -- Inversion of Control 控制反转

  创建对象的控制权,被反转到了 spring 框架。意味着将你设计好的对象交给 spring 控制管理,而不是传统的在你的对象内部直接控制。

  DI  -- Dependency Injection  依赖注入

    由 IOC 容器动态的将某个对象所需要的外部资源(包括对象、资源、常量数据)注入到组件( spring 中的组件如:controller, service..等)之中。

    大白话:也就是 IOC 会把你当前对象所需要的外部资源动态的注入给你。

  IOC 和 DI   -- “被注入对象依赖IOC容器配置依赖对象”。

    大白话:首先控制反转,我们把对象的控制权交给了 spring 框架的 IOC 容器,所以我们要使用的话,就是依赖 IOC 容器给我们动态注入。

  大白话解说IOC(控制反转)和DI(依赖注入):

  举个栗子!在 UserAction 中要用到 UserServiceImpl 中的方法,最初的方法是在 UserAction 中通过  UserService userService = new UserServiceImpl; 需要它的时候就 new 出来,控制权在自己手里,但是使用 Spring 后,UserAction 不用主动去创建 UserServiceImpl 的实例了,这个工作已经交给 Spring来做了。然后 你要用的时候再直接问 Spring 要,就可以拿来用了。

  这个时候你就由原来的主动创建,变成了被动依赖 Spring 创建好之后给你的注入,才能使用。控制权已经反转给 Spring 了~

对 Spring 的核心(AOP 和 IOC)的理解(大白话)的更多相关文章

  1. 9.秋招复习简单整理之Spring面试AOP和IOC的理解

    1.Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系,但不适用于定义横向的关系,导致了大量代码的重复,而不利于各个模块的重用. AOP,一般称为面向切面,作为面向对象的一种补充,用 ...

  2. AOP和IOC个人理解

    14:18 2014/5/5 IOC inversion of control 控制反转  将new对象的权力由调用者转移到spring容器(即xml文件),Struts2与Spring整合(scop ...

  3. spring基础概念AOP与动态代理理解

    一.代理模式 代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...

  4. 谈谈Spring Ioc的理解

    原文:http://blog.csdn.net/qq_22654611/article/details/52606960 学了几天Ioc了,但是对它的理解还是模模糊糊,看了这篇博客感觉对Ioc有了更深 ...

  5. AOP与IOC的概念

    AOP与IOC的概念(即spring的核心) a) IOC:Spring是开源框架,使用框架可以使我们减少工作量,提高工作效率并且它是分层结构,即相对应的层处理对应的业务逻辑,减少代码的耦合度.而sp ...

  6. 谈谈对Spring IOC的理解(转)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  7. 谈谈对Spring IOC的理解

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  8. Spring系列之谈谈对Spring IOC的理解

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IOC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  9. 谈谈对Spring IOC的理解【转】

    学习过Spring框架的人 一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大 ...

  10. Spring IOC的理解

            学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理 ...

随机推荐

  1. Ubuntu install TensorFlow

    /******************************************************************************** * Ubuntu install T ...

  2. 高并发中nginx较优的配置

    一.这里的优化主要是指对nginx的配置优化,一般来说nginx配置文件中对优化比较有作用的主要有以下几项: 1.nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数. wor ...

  3. L3-021 神坛 (30 分)

    在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...

  4. SolrCloud6.3 单机、集群、内置jetty、tomcat搭建、对collection操作

    参考:https://my.oschina.net/u/1416405/blog/821187 1.Solr 单机 1.1.Solr下载 1.solr官网:http://lucene.apache.o ...

  5. day35 python学习GIL解释器锁

    二 GIL介绍 GIL本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全. 可以肯定的一点是:保护不同 ...

  6. day31 python学习 操作系统的介绍,

    一 背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...

  7. Ribbon Status Bar

    https://documentation.devexpress.com/#WindowsForms/CustomDocument2498 官方文档说明 A Ribbon Status Bar (Ri ...

  8. HTML/CSS/Javascript代码在线压缩、格式化(美化)工具

    CSS 格式化 ProCSSor - http://procssor.com/   CSS 压缩 CSS Compressor - http://www.cssdrive.com/index.php/ ...

  9. Oracle根据表的大小排序SQL语句

    --按照数据行数排序select table_name,blocks,num_rows from dba_tables where owner not like '%SYS%' and table_n ...

  10. POJ1050最大子矩阵面积

    题目:http://poj.org/problem?id=1050 自己用了n^4的像暴搜一样的方法,感到有点奇怪——真的是这样? #include<iostream> #include& ...