Spring可以采用Annotation方式实现AOP,也可以采用配置文件方式实现AOP。本文讲解采用Annotation方式。
当采用Annotation的方式实现AOP时,需要引入除spring以外的以下jar包(请在附件下载):
aspectjlib-1.5.0.jar
aspectjweaver.jar
aopalliance-1.0.jar
面向接口编程:UserManager.java
package com.cos;
public interface UserManager {
public void createUser();
public void readUser();
public void updateUser();
public void deleteUser(int id);
}
实现类:UserManagerImpl.java
package com.cos;
public class UserManagerImpl implements UserManager {
public void createUser() {
System.out.println("-----------------createUser-------------------");
}
public void readUser() {
System.out.println("-----------------readUser-------------------");
}
public void updateUser() {
System.out.println("-----------------updateUser-------------------");
}
public void deleteUser(int id) {
System.out.println("-----------------deleteUser-------------------");
}
}
切面类Aspect:
package com.cos;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
/*
* 定义此类是切面类Aspect
*/
@Aspect
public class SecurityHandler{
/*
* 定义Pointcut 切入点 是个表达式 方法名随意,不允许有返回值和参数
* 最后需要把这个Aspect和目标对象都配置在IoC容器里
*/
@Pointcut("execution(* create*(..)) || execution(* update*(..))")
public void addMethod(){
}
/*
* 定义Advice 横切性关注点 此Advice是Before类型的
*/
@Before("addMethod()") //标识在哪个切入点支入、Before Advice
public void checkSecurity(){
System.out.println("------安全性检查------");
}
}
spring 配置文件 applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 启用aspectj对Annotation的支持,否则spring不认识Aspect等Annotation -->
<aop:aspectj-autoproxy/>
<!-- 对Aspect的初始化 -->
<bean id="securityHandler" class="com.cos.SecurityHandler"/>
<bean id="userManagerImpl" class="com.cos.UserManagerImpl"/>
</beans>
测试类Client.java:
package com.cos;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) {
BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");
UserManager userManager = (UserManager)beanFactory.getBean("userManagerImpl");
userManager.createUser();
userManager.updateUser();
userManager.readUser();
}
}
输出结果为:
------安全性检查------
-----------------createUser-------------------
------安全性检查------
-----------------updateUser-------------------
-----------------readUser-------------------
注:
目标对象UserManagerImpl一定要实现一个接口,原因是spring 的AOP用的就是jdk的动态代理机制,而jdk的动态代理机制要求目标对象一定要实现一个接口,这样代理对象也实现同样的这个接口,便完成了代理功能。
分享到:
相关推荐
在本资料"Spring_Annotation_AOP"中,我们将深入探讨Spring框架如何利用注解实现AOP,以及其背后的原理和实践应用。 面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性和可重用性,通过将关注点分离,...
本篇文章将深入探讨如何通过注解方式在Spring中实现AOP。 首先,我们需要了解AOP的基本概念。AOP是一种编程范式,它允许程序员定义“切面”,这些切面包含了一组相关操作,可以在多个对象或方法上统一实施。Spring ...
本实例将详细探讨如何通过注解(Annotation)来实现Spring AOP的方法拦截。 一、Spring AOP基础 Spring AOP是Spring框架的一部分,它提供了一种在运行时织入横切关注点(如日志、事务管理等)到目标对象的能力。AOP...
本篇“spring学习之五”主要介绍的是注解驱动的AOP实现。 1. **定义切面**:在Spring中,我们通常通过创建一个带有`@Aspect`注解的类来定义切面。在这个类中,我们可以定义切点和通知。例如: ```java @Aspect ...
Spring AOP提供了两种主要的方式来实现这一点:基于XML的配置和基于注解的配置。 对于基于XML的配置,我们需要在`<aop:config>`标签内定义切点表达式和通知(advice),如下: ```xml <aop:config> <aop:pointcut...
基于Annotation的AOP实现是Spring框架的一个重要特性,它极大地简化了AOP的使用。在本篇文章中,我们将深入探讨基于Annotation的AOP实现,特别是动态代理的理念。 首先,了解什么是AOP。AOP的核心概念是“切面”...
Spring提供了两种主要的AOP实现方式:基于代理(Proxy-based)和基于注解(Annotation-based)。 - **基于代理的AOP**:Spring使用JDK动态代理或CGLIB动态代理创建目标对象的代理,代理对象在调用目标方法前后执行...
在Spring AOP中,切面主要通过两种方式实现:代理(Proxies)和织入(Weaving)。 1. **代理**:Spring AOP支持两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的类,而CGLIB代理则用于没有接口或...
这篇博客"使用EJB+Annotation实现AOP的DEMO"主要介绍了如何在EJB中利用注解(Annotation)来实现AOP的功能。在Java EE中,EJB 3.0及后续版本引入了大量的注解,使得开发者可以免去编写XML配置文件,直接在代码中声明...
在Spring框架中,AOP主要通过代理模式实现,可以分为基于XML配置和基于注解两种方式。本例中,我们关注的是注解式AOP,它更加简洁且易于使用。 在Spring中,我们可以通过定义一个带有`@Aspect`注解的类来创建一个切...
本篇文章将重点讲解如何通过XML配置方式在Spring中实现AOP。 首先,了解AOP的基本概念是必要的。AOP的核心是切面(Aspect),它封装了多个相关操作,形成了一个关注点。切点(Pointcut)定义了这些操作应用到何处,...
本篇文章将深入探讨Spring AOP的四种常见实现方式。 一、基于接口的代理(Interface-Based Proxy) 这是Spring AOP最基础的实现方式,适用于目标对象实现了特定接口的情况。Spring会创建一个代理对象,该对象实现...
标题提到的"Spring 使用AspectJ 实现 AOP之前置通知小例子",指的是利用AspectJ在Spring中实现AOP的一种特定类型的通知——前置通知(Before advice)。前置通知在目标方法执行之前运行,但不会阻止方法的执行。这种...
以上就是Spring 2.0中使用AOP的一个基本实例,基于注解的配置方式使得AOP的使用更加直观和简洁。在实际开发中,我们可以根据需求灵活地定义切面和通知,以实现各种横切关注点的功能。 通过阅读提供的压缩包中的`src...
总结一下,通过上述步骤,我们已经在Spring Boot应用中利用Spring AOP和注解方式实现了数据脱敏。这个拦截器可以在不修改原有业务代码的情况下,确保敏感信息在响应给客户端之前得到处理,提高了应用的安全性。同时...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员在不修改原有代码的情况下,插入新的功能或行为。在Spring 3.0.5版本中,Spring扩展了对AOP的支持,特别是在处理HTTP响应时,可以通过AOP来获取`...
Spring框架是Java开发中不可或缺的一部分,它以其强大的...通过阅读《学习Spring笔记_AOP_Annotation实现和XML实现》以及探索`Spring_AOP_XML`中的示例,开发者可以深入理解这两个实现方式,并在实际项目中灵活运用。
在Spring框架中,AOP(面向切...总之,Spring中的AOP注解方式使得我们可以更方便地实现代码的模块化和复用,提高代码的可维护性和灵活性。通过理解和实践上述步骤,你将能够熟练地在Spring项目中应用AOP进行功能扩展。