二:SpringAOP】的更多相关文章

一.Spring框架了解 Spring框架是一个开源的框架,为JavaEE应用提供多方面的解决方案,用于简化企业级应用的开发,相当于是一种容器,可以集成其他框架(结构图如下). 上图反映了框架引包的依赖关系(例如:DAO的jar包依赖AOP的jar包,AOP的jar包依赖Core的jar包) 上图也反映了Spring功能有: IOC:控制反转,Spring的核心功能 AOP:面向切面编程 Web:MVC结构实现.与其他Web技术融合 DAO:与JDBC整合和事务管理 ORM:与ORM对象映射实现…
一:AOP 面向切面编程思想 横向重复,纵向抽取 |- filter中 |- 动态代理 |- interceptor中 二:动态代理 1.通过动态代理可以体现aop思想 2.对目标对象中的方法进行增强 三:spring实现aop的原理 1.动态代理(优先) 被代理对象必须要实现接口,才能产生代理对象,如果没有接口将不能使用动态代理技术 2.cglib代理(没有接口) 第三方代理技术,cglib代理.可以对任何类生成代理.代理的原理是对目标对象进行继承代理. 如果目标对象被final修饰.那么该类…
AOP概念 AOP(Aspect-Oriented Programming,面向切面编程),AOP是OOP(面向对象编程)的补充和完善 AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离” AOP的概念和术语 切面(Aspect) 事务处理,日志 连接点(Joinpoint) 方法调用,异常处理 通知(Advice) around,before,拦截器 切入点(Pointcut)匹配连接点的表达式 引入(Introduction)增加方法或者字段 目标对象(Target…
案例二.前端页面权限控制 对controllor控制器中的某写方法进行增强,如实现页面的按钮权限控制. /** * 保存session的容器 */ public class SessionContext { private static Map<String, HttpSession> sessionMap; // 单例 private SessionContext() { sessionMap = new ConcurrentHashMap<>(); } private enum…
常用增强处理类型 增强处理类型                                                        特点 before 前置增强处理,在目标方法前织入增强处理 AfterReturning 后置增强处理,在目标方法正常执行(不出现异常)后织入增强处理 AfterThrowing 异常增强处理,在目标方法抛出异常后织入增强处理 After 最终增强处理,不论方法是否抛出异常,都是会在目标方法最后织入增强处理 Around  环绕增强处理,在目标方法的前后都…
这次来分析下切面的执行过程. 1.怎么看? 怎么开始看源码呢?就直接从被增强的方法调用那里打断点,看看怎么执行的: 然后就来到了这: 2.初步分析 里面有段: if (this.advised.exposeProxy) { // Make invocation available if necessary. oldProxy = AopContext.setCurrentProxy(proxy); setProxyContext = true; } 就是上篇文章讲到的注解配置暴露代理对象,放到A…
在上篇文章 中我们搭建了一个阅读源码的demo工程,然后简单介绍了一下@EnableAspectJAutoProxy注解,这个注解最重要的功能就是为向Spring中注入了一个beanAnnotationAwareAspectJAutoProxyCreator,本篇文章就继续来撸AOP的源码 前文已经简单提到了这个类的功能,不过这里还是要先看一下这个类的继承图 观察类图可知,AnnotationAwareAspectJAutoProxyCreator这个类间接实现了BeanPostProcesso…
1. AOP的思想(如何实现),AOP在哪些地方使用? 相关术语有哪些? AOP是面向切面编程,它是一种编程思想,采取横向抽取机制,取代了传统纵向继承体系重复性代码的方式 应用场景有: 记录日志 监控方法运行时间(监控性能) 权限控制 缓存优化(第一次调用查询数据库,将查询结果放入内存对象:第二次调用,直接从内存对象返回,不需要查询数据库) 事务管理(调用方法前开启事务,调用方法后提交或者回滚.关闭事务) AOP的相关术语 Aspect(切面): 是通知和切入点的结合,通知和切入点共同定义了关于…
前言:学习笔记,以供参考 Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services .可以与Spring进行快速无缝的整合.灵活的部署,可以运行在Tomcat,Jboss,Jetty(内置),IBMWS,BeaWL上面. 更多CXF介绍:http://www.ibm.com/developerworks/cn/education/java/j-cxf/ 1 cxf发布服务的类 用两个不同的类发布应用: a. S…
公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为StopWatch. 文章结构: 遇到的问题 创建项目 AOP-HelloWorld 时间统计 bug final 压力测试 源码 其中,遇到的问题: 1.少包aspectjweaver 添加依赖后才可以使用@Aspect 2.环绕通知加入多个point 刚开使用&&连接多个point,傻傻的看…
(一)Aop术语定义 1.通知(advice) 通知定义了切面要做什么工作,即调用的方法,同时定义了什么时候做这些工作,即以下五种类型 (1)前置通知(Before) :在目标方法调用之前执行切面方法 (2)后置通知(After) :在目标方法调用之后执行切面方法,不关心目标方法的返回值以及是否抛出异常,类似于finally (3)返回通知(After-returning): 在目标方法正常执行不抛出异常的情况下执行切面方法 (4)异常通知(After-throwing) :在目标方法发生异常的…
前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习. 一, AspectJ的概述: AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. Spring为了简化自身的AOP的开发,将AspectJ拿过来作为Spring自身一个AOP的开发.…
一.SpringAOP: ⒈AOP:Aspect Oriented Programming 面向切面编程, 实现的是核心业务和非核心业务之间的的分离,让核心类只做核心业务,代理类只做非核心业务.  ⒉目的: ⑴.把核心业务和非核心业务进行分离 ⑵.把多个非核心业务处理(点)变成一个切面(之前的非核心业务代码需要写多次变成只需要写一次.) ⒊要求:只有当核心类中有多个业务需要进行处理的时候使用AOP较为合理,如果只有一个业务需要被处理那么就没有必要使用AOP了. 二.静态代理: 1.需要知道核心类…
一.为什么需要代理模式 假设需实现一个计算的类Math.完成加.减.乘.除功能,如下所示: package com.zhangguo.Spring041.aop01; public class Math { //加 public int add(int n1,int n2){ int result=n1+n2; System.out.println(n1+"+"+n2+"="+result); return result; } //减 public int sub(…
mybatis学习一夯实基础 上文介绍了mybatis的相关知识,这一节主要来介绍mybaits和spring的融合 一,环境搭建 1,jar包下载,下载路径为jar包 2,将包导入到java工程中 3,新建两个源文件夹,分别为spring和mybatis用来放置各自的xml文件 4,新建一个db.properties文件,用来配置数据库相关信息 最终的效果如下所示: 二,配置文件 1,数据库配置相关信息db.properties driver=com.mysql.jdbc.Driver url…
第十六章回顾SQL99中的连接查询 1)内连接 2)外连接 3)自连接 第十七章回顾hibernate多表开发 1)一对一 2)一对多 3)多对多 第十八章 mybatis一对一映射[学生与身份证] 1)参见<<一对一图示.JPG>> 2)创建students.sql和cards.sql drop table students; drop table cards; create table cards( id    int(5)      primary key, num varc…
**二.AOP的设计与实现 1.JVM的动态代理特性** 在Spring AOP实现中, 使用的核心技术时动态代理.而这样的动态代理实际上是JDK的一个特性.通过JDK的动态代理特性,能够为随意Java对象创建代理对象,对于详细使用来说,这个特性使通过Java Reflection API来完毕的.在此之前先简要复习一下Proxy模式.其静态类图例如以下: 我们能够看到有一个RealSubject,这个对象是目标对象.而在代理模式的设计中.会设计一个接口和目标对象一致的代理对象Proxy.它们都…
AOP(XML)[理解][应用][重点] 1.AOP基础实例 A.导入jar包 核心包(4个)         日志(2个)             AOP(4个) Spring进行AOP开发(1个)(3.2资源包) spring-aop-3.2.0.RELEASE.jar Spring整合AspectJ框架(3.2资源包) spring-aspects-3.2.0.RELEASE.jar AOP联盟规范(1个) (3.0.2依赖包) com.springsource.org.aopallian…
公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为StopWatch. 文章结构: 遇到的问题 创建项目 AOP-HelloWorld 时间统计 bug final 压力测试 源码 其中,遇到的问题: 1.少包aspectjweaver 添加依赖后才可以使用@Aspect 2.环绕通知加入多个point 刚开使用&&连接多个point,傻傻的看…
Spring-AOP实践 公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为StopWatch. 文章结构: 遇到的问题 创建项目 AOP-HelloWorld 时间统计 bug final 压力测试 源码 其中,遇到的问题: 1.少包aspectjweaver 添加依赖后才可以使用@Aspect 2.环绕通知加入多个point 刚开使用&&连…
OOP的完美点缀-AOP之SpringAOP实现原理 前言 OOP与AOP OOP(Object Oriented Programming,面向对象编程),通过封装.继承将程序抽象为各个层次的对象,进而组合为模块或者程序,达到了软件工程中的重用性.灵活性.扩展性.程序的运行笼统地可以看为各层次对象之间的相互调用.AOP(Aspect Oriented Programming,面向切面编程),将程序运行过程分解为一个个的切面,对特定的切面(某个步骤或者阶段)进行提取,达到解耦各种不同逻辑代码.OO…
前一节我们明白了maven是个什么玩意,这一节就来讲讲他的一个重要的应用场景,也就是通过maven将一个ssh项目分割为不同的几个部分独立开发,很重要,加油 --WH 一.maven父工程与子模块的拆分与聚合原理 问题描述:将ssh工程拆分为多个模块开发 1.1.拆分原理 创建一个maven project(pom),然后在创建三个子模块(maven moudule),其中三个子模块,分别为 dao.service.web,也就是将三层的内容分别独立为一个项目,进一步将耦合性降低,其中如何将他们…
上一博客主要学习了下bean的配置.注入.自定义属性编辑器,今天来熟悉bean的生命周期.在开发中生命周期是一个很常见的名词,基本每种编程语言都能找到与它关联的.关于bean的生命周期我在网上也找了好多,基本都差不多.这里我主要是想通过代码来验证,毕竟学的知识都是一样的,都是学的Java,最重要的是动手练习,这样印象更深.下面是它生命周期的描述,我们通过demo来进行验证.下图是它执行的顺序. 一.创建LiftCycle类实现BeanFactoryAware,BeanNameAware,Init…
在Spring之AOP一中使用动态代理将日志打印功能注入到目标对象中,其实这就是AOP实现的原理,不过上面只是Java的实现方式.AOP不管什么语言它的几个主要概念还是有必要了解一下的. 一.AOP概念 1.横切关注点 AOP把一个业务流程分成几部分,例如权限检查.业务处理.日志记录,每个部分单独处理,然后把它们组装成完整的业务流,每部分被称为切面或关注点. 2.切面 类是对物体特征的抽象,切面就是对横切关注点的抽象.可以每部分抽象成一叠纸一样一层一层的,那每张纸都是一切面. 3.连接点 被拦截…
什么是AOP? AOP基本概念 AOP使用--注解方式 AOP使用--XML方式 实例--日志 写在最前面的(源码地址): https://github.com/xc83415134/spring_aop_demo 一.什么是AOP? AOP(Aspect Oriented Programmin)即面向切面编程(或者翻译成以切面为导向的编程模式?),一种OOP延续的编程思想,将系统中非核心业务提取出来,从而将其与其所影响的对象解耦,切面就是提取出来的功能模块.切面可以帮助我们模块化横切关注点,常…
上一篇博文我们做了一个hello world的程序,并且已经成功的跑起来了.这一篇我们来深入的了解一下SpringMVC的执行流程以及一些其它的配置. 一.执行流程 来解释一下上图中的各个名词1.DispatcherServlet:SpringMVC的中央调度器,负责所有任务的调度.2.HandlerMapping:处理器映射器3.HandlerAdapter:处理器适配器4.Handler:处理器(咱们自己写的Controller)5.ViewResolver:视图解析器6.View:视图流程…
一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core.JdbcTemplate Hibernate5.0 org.springframework.orm.hibernate5.HibernateTemplate IBatis(MyBatis) org.springframework.orm.ibatis.SqlMapClientTemplate JPA…
java中事务是什么? 事务是访问数据库的一个操作序列,DB应用系统通过事务集来完成对数据的存取. 事务必须遵循4个原则,即常说的 ACID A,Automicity,原子性,即事务要么被全部执行,要么被全部不执行.如果事务下的子事务全部提交成功,则所有数据库操作被提交,否则,应进行事务回滚. C,Consistency,一致性,即状态转换必须是由一种正确的状态转换到另外一种正确的状态. I,Isolation,隔离性,即相互间必须不能被影响. D,Durabillity,持久性,即事务提交后将…
本篇内容,紧接上一篇内容Mybatis学习笔记一 输入映射和输出映射 传递简单类型和pojo类型上篇已介绍过,下面介绍一下包装类型. 传递pojo包装对象 开发中通过可以使用pojo传递查询条件.查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数.包装对象即Pojo类中的一个属性是另外一个pojo. 演示:根据用户名模糊查询用户信息,查询条件放到QueryVo的user属性中. 1.…
本节需要导入spring-aop包 注解 使用注解的目的是为了代替配置,在使用注解时,省略键时,则是为value赋值. 扫描某个包下的所有类中的注解 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.or…