1.Spring AOP的通知advice 01.接口代码: package cn.pb.dao; public interface UserDao { //主业务 String add(); //主业务 void del(); } 02.实现类代码: package cn.pb.dao; public class UserDaoImpl implements UserDao{ //主业务 public String add() { //模拟异常 //int a=8/0; System.out.…
一.背景 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以保证用户和银行的利益都不受损失. 事务特性 原子性(Atomicity):事务是一个原子操作,由一系列动作组成.事务的原子性确保动作要么全部完成,要么完全不起作用: 一致性(Consi…
Spring的作用 当我们使用一种技术时,需要思考为什么要使用这门技术.而我们为什么要使用Spring呢?从表面上面SSH这三大框架中,Struts是负责MVC责任的分离,并且提供为Web层提供诸如控制转发.数据校验,类型转换等功能.Hibernate负责将二维数据表抽象成实体类,让我们能够从面向数据表转向面向实体类开发即面向对象开发.而Spring在干什么呢?Spring似乎什么都没干,但好像少了它又不行.Spring究竟是做什么的呢?我们首先从Spring的起源来看. 提到Spring技术,…
一.背景 事件机制作为一种编程机制,在很多开发语言中都提供了支持,同时许多开源框架的设计中都使用了事件机制,比如SpringFramework. 在 Java 语言中,Java 的事件机制参与者有3种角色: 1.Event Source:具体的事件源,比如说,你在界面点击一个 button 按钮,那么这个按钮就是事件源,要想使按钮对某些事件进行响应,你就需要注册特定的监听器 listener,事件源将事件对象传递给所有注册的监听器: 2.Event Object:事件状态对象,用于监听器的相应的…
一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了BeanPostProcessor是一个bean后置处理器(bean创建对象初始化前后进行拦截工作). BeanPostProcessor的运行流程如下: 1)Spring IOC容器实例化Bean: 2)调用BeanPostProcessor的postProcessBeforeInitializati…
4,spring MVC的视图 Controller得到模型数据之后,通过视图解析器生成视图,渲染发送给用户,用户就看到了结果. 视图:view接口,来个源码查看:它由视图解析器实例化,是无状态的,所以线程安全. spring mvc提供是视图种类如图所示,根据需要选择合适的视图: 视图解析器:值提供一个把视图名称,结合本地化得到视图实例的方法: spring mvc提供的具体视图解析器有,除去两个抽象的,一共有14个:用户可选择多个视图解析器,通过orderNo指定优先级,默认的ContenN…
一.概述 切点Pointcut,切点代表了一个关于目标函数的过滤规则,后续的通知是基于切点来跟目标函数关联起来的. 然后要围绕该切点定义一系列的通知Advice,如@Before.@After.@AfterReturning.@AfterThrowing.@Around等等定义的方法都是通知.其含义是在切点定义的函数执行之前.完成之后.正常返回之后.抛出异常之后以及环绕前后执行对应的切面逻辑. 一个切点和针对该切点的一个通知共同构成了一个切面Advisor.对于一个方法,我们可以定义多个切点都隐…
要进行AOP编程,首先我们要在spring的配置文件中引入aop命名空间: =================== Spring提供了两种切面声明方式,实际工作中我们可以选用其中一种: 1. 基于XML配置方式声明切面. 2. 基于注解方式声明切面(建议使用). =================== 基于基于XML配置方式声明切面 1. 首先先定义一个切面类MyAspect(可自定义一个bean类进行测试) ------------------- 2. 然后在XML配置文件中进行配置 * po…
假如有这么一个场景,需要统计某个方法执行的时间,如何做呢? 典型的会想到在方法执行前记录时间,方法执行后再次记录,得出运行的时间. 如果采用Spring的AOP,仅仅使用前置和后置方法是无法做到的,因为他们无法共享变量.这样通过环绕通知,就可以快捷的实现. 首先在切面通知类中声明环绕通知类: public void watchPerformance(ProceedingJoinPoint joinpoint){ try{ System.out.println("begin!"); lo…
1.代理模式readMe: 代理设计模式: 是java中常用的设计模式! 特点: .委托类和代理类有相同的接口或者共同的父类! .代理类为委托类负责处理消息,并将消息转发给委托类! .委托类和代理类对象通常存在关联关系! 一个代理类对象与一个委托类对象关联! .代理类本身并不是真正的实现者!而是通过调用委托类的方法, 来实现功能! 按照代理类创建的时机,代理类分为两种: .静态代理:由我们程序猿或者特定的工具自动生成了源代码, 在程序运行之前,.class文件已经存在了! (serviceImp…