`
8366
  • 浏览: 799821 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

第18讲 --使用Spring的注解方式实现AOP的细节

阅读更多

 

 

上一讲我们使用spring注解的方式理由aop技术实现了方法的拦截,下面我们多使用一点实例,仔细体验下spring2.5 这种技术:

 

以下所有代码依赖上一讲...

被拦截的业务bean

package cn.com.xinli.service.impl;

import org.apache.log4j.Logger;

import cn.com.xinli.service.PersionSevice;
										   
public class PersionServiceBean implements PersionSevice 
{
	Logger log=Logger.getLogger(PersionServiceBean.class);
	
	public String getPersonName(Integer personid) {
		System.out.println("我是getPersonName()方法");
		return "xxx";
	}

	public void save(String name)
	{
		
		System.out.println("我是save()方法");
		
		//throw new RuntimeException("我是异常...");
	}

	public void update(String name, Integer personid) {
		System.out.println("我是update()方法");
	}

}	

 

 

1.得到例外通知

 

 

public void save(String name)
 {
  
  System.out.println("我是save()方法");
  throw new RuntimeException("我是异常...");
 }

  

结果: 注意 在异常发生的时候 后置通知 不会执行

前置通知
进入方法
我是save()方法
最终通知
例外通知:java.lang.RuntimeException: 我是异常...

 

2. 环绕通知分析:环绕通知的写法固定,入参也必须这么写,并且在方法里面一定要调用   pjp.proceed();
如果这个切面后面还有切面,则先执行后面的切面中的方法, 如果不调用这个方法,后面的切面将不能得到执行,并且

这个自身的切面 中拦截的业务方法也不能执行

 

//环绕通知,固定写法,可以实现上面的所有通知
	@Around("anyMethod()")
	public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
		//if(){//判断用户是否在权限
		System.out.println("进入方法");
		Object result = pjp.proceed();
		System.out.println("退出方法");
		//}
		return result;
	}

 

 3.在前置通知中得到方法的 输入参数 ,注解的意思是前置通知执行的条件是 业务方法中只有一个输入参数,并且参数的类型是 String ,我们在 测试用例中 ps.save("huxl") 将得到  前置通知hxl, 执行其他的业务方法,则不会被前置方法拦截到.

 

 @Before("anyMethod() && args(name)")
	public void doAccessCheck(String name) 
	{
		System.out.println("前置通知"+name);
	}

 

4.在后置通知中得到业务方法的返回结果  调用 ps.getPersonName(1); 则得到  后置通知:xxx

 /*在业务方法执行完毕后,后置通知拿到业务的返回值*/
    @AfterReturning(pointcut="anyMethod()",returning="result")
	public void doAfterReturning(String result) {
		System.out.println("后置通知:"+result);
	}

  

 5.在业务方法抛出异常的时候得到在例外通知中得到例外

 

@AfterThrowing(pointcut="anyMethod()",throwing="e")
	public void doAfterThrowing(Exception e) {
		System.out.println("例外通知:"+ e);
	}

 

 

分享到:
评论

相关推荐

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1....

    Spring Boot实战与原理分析视频课程包含14-18

    Spring Boot实战与原理分析视频课程包含14-18,本视频教程为网络整理,如有侵权,请联系删除。谢谢 Spring Boot实战与原理分析视频课程 课程目录: 1 Spring Boot概述与课程概要介绍20:33 2 Spring4 快速入门59:56...

    spring.net中文手册在线版

    第二十八章. Web框架快速入门 28.1.简介 第二十九章. SpringAir - 参考程序 29.1.简介 29.2.架构 29.3.实现 29.3.1.业务层 29.3.2.服务层 29.3.3.Web层 29.4.总结 第三十章. 数据访问快速入门 30.1.简介 第三十一章....

    Spring的学习笔记

    第十课 Spring整合Hiberante3 30 一、 Spring配置hibernate3的SessionFactory 30 (一) xml形式的SessionFactory 30 (二) annotation注解方式的SessionFactory 30 二、 引入hibernate所需要使用的jar 31 (一) 基本jar...

    spring-basic:弹簧基础

    spring-basic spring核心知识学习 弹簧芯 2015-05-18 春天环境搭建 ... AOP(注解) 弹簧 mvc 1.第一次Spring MVC 2.Spring MVC 查看JSON | XML | PDF 3.Spring MVC 查看JSON | XML | PDF | 卓越

    Spring中文帮助文档

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.6.1. 理解AOP代理 6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain ...

    Spring API

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.6.1. 理解AOP代理 6.7. 以编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ进行domain ...

    Spring 2.0 开发参考手册

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 ...

    spring chm文档

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 ...

    spring2.5 学习笔记

    第十课 Spring整合Hiberante3 30 一、 Spring配置hibernate3的SessionFactory 30 (一) xml形式的SessionFactory 30 (二) annotation注解方式的SessionFactory 30 二、 引入hibernate所需要使用的jar 31 (一) 基本jar...

    Spring攻略(第二版 中文高清版).part1

    第3章 Spring AOP和AspectJ支持 112 3.1 启用Spring的AspectJ注解支持 113 3.1.1 问题 113 3.1.2 解决方案 113 3.1.3 工作原理 113 3.2 用AspectJ注解声明aspect 115 3.2.1 问题 115 3.2.2 解决方案...

    Spring攻略(第二版 中文高清版).part2

    第3章 Spring AOP和AspectJ支持 112 3.1 启用Spring的AspectJ注解支持 113 3.1.1 问题 113 3.1.2 解决方案 113 3.1.3 工作原理 113 3.2 用AspectJ注解声明aspect 115 3.2.1 问题 115 3.2.2 解决方案...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制...

    spring3.1中文参考文档

    第一部分 Spring framework概述.......................................................................................................................6 第1章 Spring Framework介绍...........................

    spring学习笔记

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

    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}浮点数原理}...

Global site tag (gtag.js) - Google Analytics