`
coolszy
  • 浏览: 1412582 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring学习笔记(15)----使用Spring的注解方式实现AOP

阅读更多

下面介绍使用Spring框架进行AOP编程。

首先我们需要导入需要的jar包:

1.aspectjrt.jar

2.aspectjweaver.jar

3.cglib-nodep-2.1_3.jar

 

在spring中有两种方式实现面向切面编程,一种是基于XML配置,另一种是使用注解份额方式,在实际开放中我们可以任选其中的一种即可。

 

首先介绍下使用注解方式进行AOP开发。

要使用注解方式,我们需要打开注解处理器

<aop:aspectj-autoproxy/>

我们还是使用前面介绍的接口:

 

package com.szy.spring;

public interface UserManager
{

	public abstract void addUser(String username, String password);

	public abstract void deleteUser(int userId);

	public abstract String findUser(int userId);

	public abstract void modifyUser(int userId, String username, String password);

}

 

实现这个接口:

package com.szy.spring;

public class UserManagerImpl implements UserManager 
{

	public void addUser(String username, String password)
	{
		System.out.println("--------UserManagerImpl.addUser()----------");
	}

	public void deleteUser(int userId)
	{
		System.out.println("--------UserManagerImpl.deleteUser()----------");
	}

	public String findUser(int userId)
	{
		System.out.println("--------UserManagerImpl.findUser()----------");
		return null;
	}

	public void modifyUser(int userId, String username, String password)
	{
		System.out.println("--------UserManagerImpl.modifyUser()----------");
	}
}

 

下面我们定义一个切面类,由于我们使用的是注解方式,因此我们使用@Aspect来标识它是切面类。在切面类中我们要定义切入点,切入点是用来定义我们要拦截的方法。在切入点定义中使用了AOP表达式语言,下面通过实例简单解释一下:

 

@Pointcut("execution (* com.szy.spring..*.*(..))")
execution:代表执行
第一个*:代表返回值类型,使用*代表任何类型的返回值
com.szy.spring:代表包名
..:代表其底下的子包也进行拦截
第二个*:代表对哪个类进行拦截,*代表所有类
第三个*:代表方法
(..):代表方法的蚕食有无都可以

 

现在我们要对UserManagerImpl类下的所有方法进行拦截,则切入点如下表示:

@Pointcut("execution (* com.szy.spring.UserManagerImpl.*(..))")

private void anyMethod()  //定义切入点
 {
 }

 

其中切入点的名称是下面方法的名称aynMethod(),包括括号。

 

下面我们定义通知,通知分为前置通知、后置通知、意外通知、等。通知分为前置通知、后置通知、意外通知、最终通知和环绕通知等。

演示前置通知,

@Before("anyMethod()") //括号内为切入点名称
  public void doBefore()
  {
   System.out.println("----------------执行前置通知-----------------");
  }
 
  @AfterReturning("anyMethod()")
  public void doAfterReturning()
  {
   System.out.println("----------------执行后置通知-----------------");
  }
 @After("anyMethod()")
 public void doAfter()
 {
  System.out.println("----------------执行最终通知-----------------");
 }
 
  @AfterThrowing("anyMethod()")
  public void doAfterThrowing()
  {
   System.out.println("----------------执行意外通知-----------------");
  }
  
 @Around("anyMethod()")
 public Object doAround(ProceedingJoinPoint pjp) throws Throwable
 {
  System.out.println("----------------进入判断方法-----------------");
  Object result=pjp.proceed();  //该方法必须被执行
  System.out.println("----------------退出判断方法-----------------");
  return result;
 }

 

 我们把切面交给spring管理,要交给spring管理我们可以在配置文件同进行bean配置,或者使用扫描的方式。

<bean id="interceptor" class="com.szy.spring.Interceptor"/>

 下面我们进行测试

ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
		UserManager manager=(UserManager)context.getBean("userManager");
		manager.addUser("coolszy", "kuka");

 

按照我们的设计,输入的结果应为

----------------执行前置通知-----------------
----------------进入判断方法-----------------
--------UserManagerImpl.addUser()----------
----------------执行后置通知-----------------
----------------执行最终通知-----------------
----------------退出判断方法-----------------

分享到:
评论

相关推荐

    spring aop 学习笔记

    本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...

    Spring学习笔记(14)----使用CGLIB实现AOP功能

    在本篇Spring学习笔记中,我们将探讨如何使用CGLIB库来实现AOP功能。 CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它被广泛用于动态代理和运行时织入AOP切面。在Spring中,如果目标类没有...

    Spring学习笔记(16)----使用Spring配置文件实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring配置文件来实现面向切面编程(AOP)。面向切面编程是Spring框架的核心特性之一,它允许我们把关注点分离,将横切关注点(如日志、事务管理、权限控制等)与...

    SpringAop学习笔记以及实现Demo

    **Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...

    spring ioc aop mvc boot-学习笔记.docx

    Spring框架是Java开发中不可或缺的一部分,它为开发者提供了强大的依赖注入(IOC)和面向切面编程(AOP)功能,以及用于构建Web应用程序的MVC框架。Spring Boot则是基于Spring框架构建的应用程序启动器,旨在简化...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    Spring2.5.6学习笔记-最新

    以上是 Spring 2.5.6 学习笔记中的关键知识点,通过这些基础知识的学习,开发者可以开始构建基于 Spring 框架的应用程序。接下来,可以进一步深入学习 Spring 的高级特性,如事务管理、安全性、Web 开发等方面的知识...

    Spring学习笔记-cqupt

    在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...

    spring-framework-2.5-rc2-with-dependencies\spring-framework-2.5-rc2\spring-framework-2.5-rc2docs

    这个文档集合包括了Spring的API参考、用户指南、开发者笔记等,是学习和使用Spring 2.5 RC2的宝贵资源。 首先,让我们了解一下Spring的核心特性。2.5版本引入了一些重要的增强,如依赖注入(Dependency Injection,...

    SSH笔记-AOP

    SSH笔记主要围绕的是Spring框架中的AOP(面向切面编程)特性进行讲解,结合了动态代理和基于注解的配置方式。AOP是Spring框架的一个重要组成部分,它提供了一种模块化和解耦代码的方式,使得我们可以将关注点分离到...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    JSF2整合Spring3------JSF学习笔记4

    **JSF2整合Spring3——JSF学习笔记4** 在Java服务器端开发中,JavaServer Faces(JSF)和Spring框架都是重要的技术。JSF是一个用于构建用户界面的MVC(Model-View-Controller)框架,而Spring则是一个全面的企业级...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    spring学习笔记(最新版)

    ### Spring学习笔记(最新版) #### 一、Spring框架简介 Spring框架是一个广泛使用的轻量级企业级应用框架,它提供了全面的解决方案来构建复杂的Java应用程序。Spring的核心特性包括依赖注入(Dependency Injection,...

    Spring学习笔记

    ### Spring学习笔记:深入理解AOP与Annotation驱动的动态代理 #### 核心知识点解析: 在探讨Spring框架中AOP(面向切面编程)及基于Annotation的动态代理之前,我们首先需要了解AOP的基本概念及其在Spring中的实现...

    Spring框架学习笔记

    这份"Spring框架学习笔记"涵盖了Spring框架的基础知识、核心组件以及高级特性,对于初学者来说是一份宝贵的资料。 一、Spring框架概述 Spring框架是为了解决企业应用开发的复杂性而设计的,它提供了一个全面的基础...

    Spring AOP 使用笔记

    本笔记主要探讨了如何在Spring应用中使用AOP来实现横切关注点,如日志、事务管理、性能监控等。 首先,理解AOP的基本概念至关重要。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或责任。切面由两个主要...

    Spring学习笔记(6)----编码剖析Spring依赖注入的原理

    本篇学习笔记将深入剖析Spring依赖注入的原理,通过源码分析帮助我们理解这一核心机制。 首先,依赖注入允许我们解耦组件之间的关系,使得各个组件可以独立地进行开发、测试和维护。在Spring中,DI主要通过两种方式...

    springboot学习思维笔记.xmind

    springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...

Global site tag (gtag.js) - Google Analytics