`
coolszy
  • 浏览: 1407131 次
  • 性别: 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()----------
----------------执行后置通知-----------------
----------------执行最终通知-----------------
----------------退出判断方法-----------------

分享到:
评论

相关推荐

    SpringAop学习笔记以及实现Demo

    SpringAOP学习笔记以及四个可运行的Demo,涵盖经典代理模式、基于注解、基于xml配置这3方面的Demo

    springboot学习思维笔记.xmind

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

    Spring的学习笔记

    一、 开始使用annotation配置Spring 16 二、 @Autowired、@Qualifier 16 (一) @Autowired 16 (二) @Qualifier 17 三、 @Resource(重要、推荐) 17 (一) JSR-250 17 (二) @Resource 17 四、 @Componet 18 五、 @Scope...

    spring学习笔记(有代码有注解解释)

    内容概要:学习Spring的一些学习笔记,主要学习Spring 框架两大核心机制(IoC、AOP) 笔记大纲:阅读笔记可以学习了解一下内容 如何使用 IoC ;配置文件;IoC 底层原理;通过运行时类获取 bean;通过有参构造创建 ...

    spring2.5 学习笔记

    一、 开始使用annotation配置Spring 16 二、 @Autowired、@Qualifier 16 (一) @Autowired 16 (二) @Qualifier 17 三、 @Resource(重要、推荐) 17 (一) JSR-250 17 (二) @Resource 17 四、 @Componet 18 五、 @Scope...

    Spring入门学习笔记|Spring学习.pdf

    Spring入门学习笔记,内容包括Spring介绍,Spring配置文件,Spring配置数据源,Spring的注解开发,Spring集成Junit,Spring的AOP,jdbcTemplate介绍,Spring控制事务流程,Spring集成web。

    SSH2--spring 2.5.6 + struts 2.2.1 + hibernate 3.5.5全部的注解的 M V C

    spring 2.5.6 + struts 2.2.1 + hibernate 3.5.5 内有 AOP 的切面、全部的注解的 M V C 结构,之外还在上网上找了一个同学的学习笔记一起打包,感觉好不错!

    Java学习笔记-个人整理的

    {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {1.4.1}整数与浮点数}{23}{subsection.1.4.1} {1.4.1.1}浮点数原理}...

    spring学习笔记

    Spring的Ioc Spring的AOP , AspectJ Spring的事务管理 , 三大框架的整合 目录 1.1 Spring 框架学习路线:..........................................................................................................

    spring 4.doc

    资源是关于Spring 4的学习笔记,Spring有Bean配置,属性注入方式,Spring分模块开发,Aop技术,Jdbc模板使用,事务管理(其中包括XML开发方式和注解开发方式)

    xmljava系统源码-SpringInAction4:《SpringInAction4th》学习笔记

    xml java系统源码 SpringInAction4 《Spring In Action ...注解方式可以实现更细粒度的自动装配,Spring容器默认禁用注解装配,要在配置文件中开启 配置自动扫描 在基于Java的配置中使用@Configura

    【2019版】Spring4.3入门视频课程

    本课程以通俗易懂的方式讲解Spring核心技术,...三、Spring注解配置 注解简介 IOC注解 AOP注解 四、Spring整合 Spring整合Web Spring整合JDBC Spring整合MyBatis 教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

    Java学习过程中笔记的配套代码

    ─algorithms 算法 ├─database 数据库 ├─distributed 分布式系统 ├─framework 一些常用...├─spring-annotation spring注解驱动开发 ├─spring-batch ├─springboot-aop springaop使用以及aop应用 │ └─

    spring完整讲义.rar

    该文档主要用于spring学习者,其中包含详细的spring的知识点及通俗介绍,包含:IOC、DI、AOP、spring的xml注入与注解注入方式、SSH整合

    LSFramework:手写山寨版spring学习aop,ioc思想的demo,没看过spring的源码,因为实在是太庞大了,参考部分网上博客和开源代码完成

    手写山寨版“ spring”,学习aop,ioc思想的demo,没看过spring的源码,因为实在是太庞大了,参考部分网上博客和开源代码完成。 主要功能模块: 国际奥委会 哎呀 的jdbc rpc 其他资源 关键代码笔记,不想看所有...

    超详细的Spring框架讲解,就这一篇!足矣

    Spring框架概述1、什么是Spring2、Spring框架的优点3、Spring框架体系...使用注解3.3、自动装配4、IOC中的一些细节Spring框架——AOP(面向切面编程)1、AOP介绍1.1、什么是AOP1.2、主要功能1.3、专业术语1.4、AOP与...

    全网最详细的Spring核心

    适合小白学习spring,也适合对spring想了解和巩固知识的人来观看,本篇文章完全是处于自己在学习当中总结的笔记,便于日后查看。希望本篇文章能够帮助正在学习spring或者复习spring的人员,

    java-advance:java进阶学习的一些笔记

    Java高级java进阶学习的一些笔记java8-时间类拉姆达反射机制注解/注解解析器春天SpringIOC SpringAOP

    code:Java学习过程中笔记的配套代码

    algorithms 算法│├─database 数据库 │├─distributed 分布式│├─java-advance 高级类库和jsr规范等 │├─java-basic Java基础 │├─mvc mvc框架 │├─orm orm框架 │├─spring-annotation spring注解驱动...

Global site tag (gtag.js) - Google Analytics