1.AOP(面向切面编程)

  a.定义:AOP将分散在系统中的功能块放到一个地方——切面

  b.重要术语:

    ①切面(Aspect):就是你要实现的交叉功能---共通业务处理可以被切入到多个目标对象。并且多次使用

    ②连接点(Joinpoint):应用程序执行过程中插入切面的地点

    ③通知(Advice):通知切面的实际实现

    ④切入点(Pointcut):定义通知应用在哪些连接点---连接点的集和

    ⑤目标对象(Target Object):被通知的对象,也就是目标对象

    ⑥代理(Proxy):将通知应用到目标对象后创建的对象---AOP中容器返回的对象是代理对象。用户在使用的时候,由代理对象调用切面组件和目标对象的功能

    ⑦织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象的过程

  c.配置XML

    <aop:config>
<aop:pointcut id="userPointCut"
expression="execution(* com.wode.service.UserService.*(..))" />
<aop:aspect id="logAspect" ref="userLogger">
<aop:before method="testLogger" pointcut-ref="userPointCut"></aop:before>
</aop:aspect>
</aop:config>

  d.通知类型:

    ①<aop:before>——前置通知

    ②<aop:after-returning returning="test">——方法调用之后,但是如果有异常将不通知

    ③<aop:after>——最终通知

    ④<aop:after-throwing throwing="e">——方法调用发生异常之后

    ⑤<aop:around>——环绕通知

  e.ProceedingJoinPoint——环绕通知的形参

public void testLogger(ProceedingJoinPoint pjo){

    Object obj=pjo.proceed();    //放行,obj为返回值

    System.out.println(pjo.getTarget());    

    System.out.println(pjo.getArgs()[0]);    //获取形参

    System.out.println(pjo.getSignature().getName());    //获取方法名

    System.out.println(pjo.getTarget().getClass().getName());    //获取类名

}

  f.福利

    ①在xml中书写

  <aop:aspectj-autoproxy />

    ②使用注解

    @Component("userLogger")
@Aspect

    ③定义切入点

    @Pointcut("within(com.wode.service.UserService)")
public void pointCut(){}

    ④设置

    @Before("pointCut()")
public void testLogger() throws Throwable{
System.out.println("前置记录日志");
}

JavaEE 之 Spring(二)的更多相关文章

  1. spring(二、bean生命周期、用到的设计模式、常用注解)

    spring(二.bean生命周期.用到的设计模式.常用注解) Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的. ...

  2. JavaEE 之 Spring Data JPA(二)

    1.JPQL a.定义:Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成 ...

  3. Spring(二)Bean入门

    一.BeanFactory介绍 1.1.Bean: 在Spring技术中是基于组件的 最基本了是最常用的单元 其实实例保存在Spring的容器当中 Bean通常被定义在配置文件当中,Bean实例化由S ...

  4. Spring二 Bean详解

    Bean详解 Spring框架的本质其实是:通过XML配置来驱动Java代码,这样就可以把原本由java代码管理的耦合关系,提取到XML配置文件中管理.这样就实现了系统中各组件的解耦,有利于后期的升级 ...

  5. Spring(二)——IoC

    IoC(Inversion of Control)称之为控制反转,指的是在Spring框架的配置文件中声明对象,由框架负责创建对象,这叫做控制反转.实现方式有两种:DI(Dependency Inje ...

  6. spring(二) AOP之AspectJ框架的使用

    前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...

  7. JavaEE 之 Spring(三)

    1.Spring Web MVC a.定义:是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是 ...

  8. Spring(二)之入门示例

    任何编程技术,特别是入门示例,通常都是Hello World,在这里我也遵循这个业界公认的原则. 这里我使用的maven项目,大家如果想要演示,建议使用Eclipse(含maven插件)或Idea(含 ...

  9. Spring(二十)之使用Log4j记录日志

    日志记录,也是常用的,比如异常信息记录或者其他相关信息记录,良好的日志记录有助于当系统出现某些不是特别大的问题时,可及时通过日志信息,捕捉到异常,从而确定是那段代码的问题,避免影响其他的代码. 关于m ...

随机推荐

  1. 纯webpack打包项目

    webpack 3 零基础入门教程 http://webpackbook.rails365.net/466996(文本) https://www.rails365.net/movies/webpack ...

  2. Jquery如何获取iframe里面body的html呢?

    如果是自己网页的话,可以这样,$("iframe").contents().find("body").html();意思是,获取iframe里面页面body的内 ...

  3. day 13 装饰器

    装饰器基础 装饰器的目的是为了给被装饰 对象,增加新功能,或者说增加某种能力 在程序中工具就是函数 如此一来,装饰器指的就是一个函数,被装饰着也是一个函数 总结;装饰器就是用一个函数去拓展另外一个已存 ...

  4. jmeter BeanShell实例-----两个变量之间的断言对比

    jmeter BeanShell实例-----两个变量之间的断言对比 在jmeter的中,断言没法对两个变量的进行对比后判断,只能使用Bean Shell断言来进行,总是有人来问怎么写呢.这里写一个简 ...

  5. Vue-cli添加全局js

    1.填写全局config.js function getConfig(str){ var ajaxurl = "http://112.80.39.92:8008/webservices/re ...

  6. java编译通过,为什么运行却提示找不到或无法加载主类?

    java编译通过,为什么运行却提示找不到或无法加载主类? https://www.zhihu.com/question/36537093 这边提供一个关于程序中含有package关键字,使用“终端”运 ...

  7. C#算法 选择排序、冒泡排序、插入排序

    1.冒泡排序: 方法一: public static int[] MaoPao(int[] arr) { //执行多少次 for (int i = 0; i < arr.Length; i++) ...

  8. 为什么dbms_metadata.get_ddl显示不全?

    http://bi.dataguru.cn/thread-335433-1-1.html

  9. 记JS一个错误,

    在定义变量时候,如果直接定义 var obj=null;那么,在转码时候,比如转为base64,此时或出现特殊的文字(也是汉字,只是很少见少用的文字,而且,出现的文字是根据你给obj赋值决定的,) 由 ...

  10. [转]Ubuntu /home下中文目录如何修改成英文?

    http://www.linuxidc.com/Linux/2016-05/130873.htm 打开终端,在终端中输入命令: export LANG=en_US xdg-user-dirs-gtk- ...