Spring 基础知识(一)基本概念 DI、IOC、AOP
- 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的更多相关文章
- Spring基础知识
		
Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...
 - Spring 基础知识
		
Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻 ...
 - spring 基础知识复习
		
spring是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式. 组成spring框架的每个模块(或组件)都可单独存在 ...
 - Spring基础知识及bean的配置
		
IOC与DI: IOC(inversion of control):其思想是反转资源获取的方向.传统的资源查找方式要求组件向容器发起请求查找资源.作为回应,容器适时的返回资源.而应用了IOC之后,则是 ...
 - JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目
		
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
 - Spring的俩大核心概念:IOC、AOP
		
1.Spring 有两个核心部分: IOC 和 Aop (1)IOC:控制反转,把创建对象过程交给 Spring 进行管理 (2)Aop:面向切面,不修改源代码进行功能增强 2.Spring 特点 ...
 - Spring基础知识详解
		
Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring ...
 - Spring基础知识之依赖注入
		
Spring框架的四大原则: 1)使用POJO进行轻量级和最小侵入式的开发. 2)通过依赖注入和基于接口编程实现松耦合. 3)通过AOP和默认习惯进行声明式编程. 4)使用AOP和模板(templat ...
 - 1.spring基础知识讲解
		
引言:以下记录一些自己在使用时pringle框架时的一些自己心得合成体会时,如有侵权,请联系本博主. 1. spring基本都使用 spring是一个开源的轻量级框架,其目的是用于简化企业级应用程序开 ...
 
随机推荐
- Linux (麒麟)系统 重启后无法登陆进图形界面
			
登录图形化界面的时候,会显示GNOME电源管理器没启动等提示信息,会一直卡在登录界面 在启动的时候按ESC或者在登录界面crtl+alt +f3 进入字符终端界面 查看物理存储空间占用信息,可能会有一 ...
 - 5、Docker容器网络
			
使用Linux进行IP层网络管理的指 http://linux-ip.net/html/ # yum install iproute http://linux-ip.net/html/tool ...
 - Springboot中Jackson的操作
			
有一段时间没写博客了,虽然是菜鸟一枚但毕竟总要有东西记录学习的,我相信有志者事竟成.今天在工作中使用Jackson转换了一个javabean,传到测试服上之后发现日期少了一天,使用的是@JsonFor ...
 - jmeter 学习笔记
			
beanshell内置对象 vars是针对单线程,使用${varName}访问var变量值 props是所有线程共享,使用${__P(propName,)}访问prop变量值 如何让variable在 ...
 - Groovy 语法学习
			
一.配置 Groovy 环境: 下载 Groovy(Groovy 依赖 Java,所以需要 JDK 环境):http://www.groovy-lang.org/download.html 配置环境变 ...
 - 蚂蚁金服mPaaS 3.0发布 助力客户智能化构建超级App生态
			
1月4日,蚂蚁金融科技宣布蚂蚁金服移动开发平台mPaaS(mobile Platform-as-a-Service)升级到3.0版本,“新版本以智能技术助力客户构建自己的超级 App,企业可以拥有等同 ...
 - Python3爬虫相关软件,库的安装
			
Anaconda 百度搜Anaconda清华,根据环境选择版本下载 安装时记得勾选添加到环境变量,不要还要手动添加 Anaconda Navigator可视化界面,可以方便地调用Jupyter等工具. ...
 - linux中的wc命令
			
linux中wc命令用法 Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: ...
 - Flutter采坑之路 用真机跑起来的时候提示 initGradle失败,IO异常,downloading Gradle-4.6-all.zip失败
			
这个异常就是Gradle下载异常,进而下面会提示一行IO异常 我这里的原因就是Gradle对应的4.6-all版本下载不下来(一般情况下确实很难下载下来) 所以在正常AS工程呢,我们选择一下Gradl ...
 - sqlserver 查询表锁死,解除表锁死
			
查询锁死的表名以及ID select request_session_id id, OBJECT_NAME(resource_associated_entity_id) tableName FROM ...