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是一个开源的轻量级框架,其目的是用于简化企业级应用程序开 ...
随机推荐
- jmeter 学习笔记
beanshell内置对象 vars是针对单线程,使用${varName}访问var变量值 props是所有线程共享,使用${__P(propName,)}访问prop变量值 如何让variable在 ...
- js var 以及 let 的差异
例子 window.checklist=[{"boardname":"motor_board","cur":"1.0.0" ...
- python常见报错类型
更新ing 报错类型 报错内容 错误判断 错误解决方式 IndentationError IndentationError:unexpected indent 格式错误:以外缩进 Indenta ...
- Educational Codeforces Round 5F. Expensive Strings
题意:给n个串ti,ps,i是s在ti中出现的次数,要求找到s,使得\(\sum_{i=1}^nc_i*p_{s,i}*|s|\)最大 题解:sam裸题,每次插入时相当于在fail链上到1的位置加ci ...
- C++ 中缀转后缀表达式并求值
//中缀转后缀 #include<iostream> #include<stack> using namespace std; int prio(char x){ ; ; ; ...
- hive -- 自定义函数和Transform
hive -- 自定义函数和Transform UDF操作单行数据, UDAF:聚合函数,接受多行数据,并产生一个输出数据行 UDTF:操作单个数据 使用udf方法: 第一种: add jar xxx ...
- hive的排序,分組练习
hive的排序,分組练习 数据: 添加表和插入数据(数据在Linux本地中) create table if not exists tab1( IP string, SOURCE string, TY ...
- Linux开发工具_yum使用
yum 的说明与使用 1.什么是yum? 软件包管理器 提供了查找.安装.删除某一个.一组甚至全部软件的命令 命令简洁好用 2.yum语法 yum [ 选项 ] [命令] [安装包] 选项: -h h ...
- Oracle单机Rman笔记[3]---RMAN脱机备份及命令基础介绍
A.NOARCHIVELOG模式下的物理备份 1.完全关闭数据库 2.备份所有的数据库文件.控制文件.联机重做日志 3.重新启动数据库 B.RMAN的体系结构概述 重新构建控制文件: 将控制文件备份为 ...
- Abp 中 模块 加载及类型自动注入 源码学习笔记
注意 互相关联多使用接口注册,所以可以 根据需要替换. 始于 Startup.cs 中的 通过 AddApplication 扩展方法添加 Abp支持 1 services.AddApplicati ...