Spring核心概念(二)
IOC/DI
IOC(控制反转):对象(组件)的创建由代码中转移到外部容器(XML,注解) .
DI(依赖注入):当类A需要使用类B时,那么我们需要为类A的属性赋值类B的对象.
这种现象我们称为依赖注入.
注意:IOC/DI指的是同一个东西,理解的角度不一样.
补充:组件化思想:分离关注点,使用接口,不再关注实现.
AOP(面向切面编程)
AOP:是一种通过预编译和运行期动态代理的方式实现在
不修改源代码的情况下给程序动态添加功能的技术.
原理:
a.将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决.
b.采用代理机制组装起来运行,在不改变原程序的基础上对
代码段进行增强处理,增加新的功能.
术语:
增强处理(Advice)
前置增强
后置增强
环绕增强、异常抛出增强、最终增强等类型.
切入点(Pointcut)
连接点(Join Point)
切面(Aspect):切入点+增强处理.
目标对象(Target object)
AOP代理(AOP proxy)
织入(Weaving)
开发步骤:
第一步:写增强功能
第二步:配置核心文件
<!-- 注册增强类 -->
<bean id="tp" class="增强类">
<!-- 配置切面-->
<aop:config>
<!-- 配置切入点-->
<aop:pointcut id="名称" expression="
execution(匹配类和方法的表达式)
"/>
<!-- 配置切面-->
<aop:aspect ref="增强类的id">
<!-- 切面的增强方法和切入点 -->
<aop:before method="增强方法" pointcut-ref="切入点的id" />
</aop:aspect>
</aop:config>
第三步:测试
匹配表达式
public * addUser(entity.User) //"*":任意返回值类型.
public void *(entity.User) //"*":任意方法名
public void addUser(..) //"..":任意个任意类型的参数
* com.service.*.*(..) //com.service包下的所有直接子类的所有方法.
* com.service..*.*(..) //com.service包及其所有子包的所有类的所有方法.
Spring核心概念(二)的更多相关文章
- SSM 五:Spring核心概念
第五章:Spring核心概念 一.Spring Ioc 优点: 1.低侵入式设计 2.独立于各种应用服务器 3.依赖注入特性将组建关系透明化,降低耦合度 4.面向切面编程的特性允许将通用性任务集中式处 ...
- Spring 核心概念
Spring 核心概念 引言 本文主要介绍 Spring 源码中使用到的一些核心类 1. BeanDefinition BeanDefinition表示Bean定义,BeanDefinition 中存 ...
- Spring系列(一):Spring核心概念
一.Spring概念 Spring是一种多层的J2EE应用程序框架,其核心就是管理资源组件以及依赖关系,Spring框架为现代基于java的企业应用程序提供了一个全面的编程和配置模型. 二.Sprin ...
- Spring核心概念和案例
一.Spring概念 1.Spring框架概述 轻量级的Java EE开源框架,它是由Rod Johnson为了解决企业应用程序开发的复杂性而创建, Spring框架提供了一个开发平台,用于整合其他技 ...
- 第一章 spring核心概念
一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...
- disruptor 核心概念 二
一.Disruptor图解 二.disruptor核心概念 1.RingBuffer到底是啥?正如名字所说的一样,他是一个环(首尾相接的环)它用做在不同上下文(线程)间传递数据的buffer Ring ...
- Spring核心概念之AOP
一.AOP 的概念 AOP(Aspect Oriented Programming)的缩写,面向切面编程,主要作用就是对代码进行增强处理. 理解面向切面编程的含义:就是在不改变原有程序的基础上为代码增 ...
- Spring 核心概念以及入门教程
初始Spring 在学习Spring之前我们首先要了解一下企业级应用.企业级应用是指那些为商业组织,大型企业而创建并部署的解决方案及应用. 这些大型企业级应用的结构复杂,涉及的外部资源众多,事务密集, ...
- 自己实现spring核心功能 二
前言 上一篇我们讲了spring的一些特点并且分析了需要实现哪些功能,已经把准备工作都做完了,这一篇我们开始实现具体功能. 容器加载过程 我们知道,在spring中refesh()方法做了很多初始化的 ...
随机推荐
- RabbitMQ学习之(二)_Centos6下安装RabbitMQ及管理配置
首先yum方式安装依赖包 yum install ncurses-devel unixODBC unixODBC-devel 安装Erlang语言环境 wget http://erlang.org/d ...
- 机器学习实战笔记(Python实现)-07-模型评估与分类性能度量
1.经验误差与过拟合 通常我们把分类错误的样本数占样本总数的比例称为“错误率”(error rate),即如果在m个样本中有a个样本分类错误,则错误率E=a/m:相应的,1-a/m称为“精度”(acc ...
- Spring使用事务
Spring使用事务,一共有4个步骤 1.配置数据源 例如: <bean id="dataSource" class="com.mchange.v2.c3p0.Co ...
- linux下tar的使用方法
1.仅打包 tar -cvf hello.tar hello (输出文件大小为10240) 2.打包后压缩成gzip压缩格式 tar -czvf hello.tar.gz hello (输出文件大小为 ...
- How To Use Coordinates To Extract Sequences In Fasta File
[1] bedtools (https://github.com/arq5x/bedtools2) here is also bedtools (https://github.com/arq5x/be ...
- GDPR或使全球域名whois信息被隐藏
什么是GDPR? GDPR 全称为 General Data Protection Regulation,是欧盟 2016 年 4 月通过的一项通用数据保护条例(或称“一般数据保护法案”),是 199 ...
- Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍
参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...
- jquery实现全选/全不选
//设置全选全不选$("#checkAll").click(function () { if ($("#checkAll").attr("checke ...
- geoserver源码学习与扩展——跨域访问配置
在 geoserver源码学习与扩展——restAPI访问 博客中提到了geoserver的跨域参数设置,本文详细讲一下geoserver的跨域访问配置. geoserver的跨域访问依赖java-p ...
- 使用 Python 在 Caché 和 Sql Server 之间同步数据
任务目标:抽取 Caché 中的数据,导入 Sql Server 中. 遇到的问题: 1.UnicodeEncodeError: ‘ascii’ codec can’t encode characte ...