增强注解

结合打印机的例子

要实现打印,必须要调用printer类中的print()方法

现在我希望,在print()方法执行之前,先执行---log.debug("执行了before()方法。。。");---这句话

要达到这个目的,可以直接在print()方法的最前面,加入上述语句。

当然,现在学了spring的AOP之后,有了多一个选择:通过增强配置实现

实现方法:

1.准备一个对象,里面写一个方法before(),方法里加入上面那句话

2.通过AOP把print()方法和第一步得到的方法绑定在一起.

相当于创建了一个新的类newobject,在这个类里面定义一个新的方法printBefore()

在这个方法里面,有2句话:

before();

print();

这个newobject对象的名字里面包含了“proxy”

上面的工作其实spring都已经帮我们做了,我们现在剩下要做的工作,只是需要告诉spring,print()方法和before()方法在哪,以及方法名就够了,

做这一步工作的方式有三种:

1.通过让before()方法去实现指定的接口,来让spring知道

剩下print()方法,通过在applicationContext.xml文件中,<aop:config><aop:pointcut expression="execution(方法定义)" />来指定

同时,告诉spring,before()方法与print()方法是一起的<aop:advisor/>

2.通过注解:

首先在before()方法所在的类前面,加上@Aspect,表示这个类是用来增强的

下一步,为了确认是before()方法,就在before()方法前面,加上@Before.

然后,为了告诉spring before()方法与print()方法是一起的,需要在@Before后面加上(execution(访问控制权限 包.接口.print()))

当然,为了应用注解,还需要在applicationContext.xml文件中做一个声明:

<bean id="alllogger" class="cn.jbit.log.AllLogger"></bean>

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

3.通过schema配置切面的方式实现:

首先定义before()方法,print()方法

下一步,需要在applicationContext.xml文件中,加上如下语句:

<aop:config>

<!--* cn.jbit.print.IPrinterDAO.*(..):指定print()方法在哪个位置,以及方法名 -->

<aop:pointcut expression="execution(* cn.jbit.print.IPrinterDAO.*(..))" id="pt"/>

<!-- 需要指定哪个对象将要和print()方法绑定 -->

<aop:aspect ref="alllogger">

<!-- 还需要指定对象的哪个方法将要与print()方法绑定 -->

<aop:before method="before" pointcut-ref="pt"/>

增强类型目前共学习了四种:

前置增强:在print()方法执行之前要执行

后置增强:在print()方法执行之后要执行

环绕增强:在print()方法执行之前和之后都要执行

异常抛出增强:当print()方法执行过程中发生异常的时候要执行

时间: 2024-12-28 15:25:32

增强注解的相关文章

springmvc 通过异常增强返回给客户端统一格式

在springmvc开发中,我们经常遇到这样的问题:逻辑正常执行时返回客户端指定格式的数据,比如json,但是遇NullPointerException空指针异常,NoSuchMethodException调用的方法不存在异常,返回给客户端的是服务端异常堆栈信息,导致客户端不能正常解析数据:这明显不是我们想要的. 幸好从spring3.2提供的新注解@ControllerAdvice,从名字上可以看出大体意思是控制器增强.原理是使用AOP对Controller控制器进行增强(前置增强.后置增强.

Java魔法堂:自定义和解析注解

一.前言 注解(Annotation)作为元数据的载体,为程序代码本身提供额外的信息,使用过MyBatis等ORM框架的朋友对 @Insert 的注解应该不陌生了,这是MyBatis自定义的注解,显然我们也可以按需求自定义一些注解,然后对其进行解析获取元数据,进而实现通过代码生成代码的操作. 二.自定义注解 只需通过 关键字@interface 即可自定义注解 // 标识注解(就是无属性的注解) public @interface AnnotationWithoutProperty{ } //

SpingMVC 核心技术帮助文档

SpringMVC 框架使用技巧 声明:本篇文档主要是用于参考帮助文档,没有实例,但几乎包含了SpringMVC 4.2版本的所有核心技术 对于觉得篇幅长的文档,建议大家使用快捷键crtl + F,搜索关键字查询较为方便. 欢迎加群JAVA编程交流群 574337670 21.1 Spring Web MVC框架简介 Spring的模型-视图-控制器(MVC)框架是围绕一个 DispatcherServlet 来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射.视图渲

《Java从入门到放弃》入门篇:spring中AOP的配置方式

spring中最核心的两个东东,一个IOC,一个AOP. AOP(Aspect-OrientedProgramming)面向方面编程,也可以叫面向切面编程. 从一个新人的角度可以这样来理解:一般软件中的功能,我们可以分为两大类,一类是业务功能,一类是系统功能. 业务功能是指这个软件必须要用到的,没有的话客户就不给钱的.比如淘宝APP,如果你只能在上面浏览商品而不能购物,那就说明业务功能太监了···. 系统功能主要是指与业务无关,没有这块内容也不影响软件使用的.比如日志管理.权限处理等. AOP主

spring-springmvc搭建(三)springMVC添加对静态资源访问的支持及对Fastjson的支持

1.添加对静态资源.js/.img/.css的访问 方式有3种: 1,更改springmvc 的DispatherServlet的urlpattern的路径改为“/*.do”. 2.添加<mvc:default-servlet-handler>,同时在web.xml中添加default的映射类型,目的让springmvc识别出那些可以放行,那些不可以. 在springmvc的上下文中添加: <mvc:default-servlet-handler/> 在web.xml中<se

Spring框架(5)--AOP相关内容

什么是AOP: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率.在程序运行期间,在不修改源码的情况下对方法进行功能增强. 相关概念: Target

Spring aop——前置增强和后置增强 使用注解Aspect和非侵入式配置

AspectJ是一个面向切面的框架,它扩展了java语言,定义了AOP语法,能够在编译期提供代码的织入,所以它有一个专门的编译器用来生成遵守字节码字节编码规范的Class文件 确保使用jdk为5.0以上版本. 01.使用注解标注增强(AspectJ)  :取代了配置文件中的aop:pointcut节点的配置 添加jar和log4j的配置文件 aspectj-1.8.7.jar aspectjweaver.jar 添加头文件: xmlns:aop="http://www.springframewo

用注解@DelcareParents实现引用增强

引用增强,是一个比较特殊的增强,不同于其他方法级别的增强. 引用增强可以实现:一个Java类,没有实现A接口,在不修改Java类的的情况下,使其具备A接口的功能. 先看看背景,我们有个Love接口: package com.stuPayment.aopTest; public interface Love { public void sayLove(); } 还有一个Greeting接口和我们的GreetingImpl实现类,这两个是我们的目标接口和目标类,GreetingImpl是我们要加强的

springBoot AOP环绕增强、自定义注解、log4j2、MDC

(一)log4j2 maven配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!-- 切换log4j2日志读取 --> <exclusion> <groupId>org.springframework.b