`
8366
  • 浏览: 809070 次
  • 性别: 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 AOP API 设计与实现1

    Spring AOP API 设计与实现是Spring框架的重要组成部分,它提供了面向切面编程的能力,使得开发者可以在不修改源代码的情况下,对程序进行横切关注点的处理,如日志记录、事务管理等。本章主要涵盖了Spring AOP的多...

    spring_in_action-sixth-edition.pdf

    其中,Spring 提供了多种方式来处理 web 请求,例如使用 @RestController 注解或使用 Spring MVC 框架。 4. Spring Boot Spring Boot 是 Spring 框架的子项目,提供了一个快速构建生产级别应用程序的方式。Spring ...

    spring aop

    Spring AOP的实现有两种方式:代理模式和注解驱动。代理模式分为JDK动态代理和CGLIB代理,前者针对接口,后者针对类。注解驱动则更便于使用,通过在方法上添加如`@Before`、`@After`等注解,可以直接定义通知。 ...

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

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

    day39-Spring 18-Spring的JDBC模板:查询的操作

    在Spring框架中,JDBC模板(JdbcTemplate)是Spring对Java数据库连接(JDBC)API的一个强大封装,它简化了数据库操作,使开发者能够更专注于业务逻辑而不是底层的数据库交互细节。今天我们将深入探讨Spring的JDBC...

    springlive(共11章)

    11. **第十一章:Spring Cloud** - 微服务概述:介绍微服务架构,以及Spring Cloud在其中的作用。 - Spring Cloud组件:了解Eureka、Zuul、Ribbon、Hystrix等核心组件的用法,构建微服务生态。 通过阅读《Spring...

    Pro Spring3

    #### 十八、Spring Web Flow 与 JSF(第18章) - **Spring Web Flow 简介**:介绍 Spring Web Flow 框架及其作用。 - **JSF 整合**:指导如何将 JSF 与 Spring Web Flow 进行整合。 - **流程管理**:讲解如何管理 ...

    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进行依赖注入 ...

    java框架之spring

    Spring的核心优势在于其灵活的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)的能力,这使得开发者能够更加关注业务逻辑而减少对底层框架细节的关注。 ##### 1.1 Spring的七...

    资料-SS M框架Spring+SpringMVC+MyBatis全覆盖.zip

    - 第十一天资料:可能讲解了MyBatis的基本使用,如配置文件、映射文件和SqlSession的使用。 - 第十六天资料:可能深入到了SSM整合的实践,如何在Spring中配置SpringMVC和MyBatis,以及事务管理。 每个阶段的学习...

    Apress.Pro.Spring.4th.Edition

    - **注解配置**:探讨了Spring注解驱动的配置方式,如@Component、@Service、@Repository等。 - **混合配置**:讨论如何结合XML配置和注解配置的方式,以及它们各自的优缺点。 #### 5. 引入Spring AOP - **AOP基础*...

    spring framework 3 教程

    #### 第十八章:Spring中定制事件 - **自定义事件:** - 可以创建自己的事件类,并通过ApplicationContext.publishEvent方法发布。 #### 第十九章:Spring框架的AOP - **AOP术语:** - 包括切面、连接点、通知等...

    Beginning Spring(2015)

    第十二章探讨了如何使用Spring Security框架来保护Web应用程序的安全性。Spring Security是一个功能强大的安全框架,支持认证、授权以及其他高级安全功能。本章详细介绍了如何配置Spring Security来实现基于角色的...

    spring2.5 学习笔记

    #### 第十课:Spring 整合 Hibernate - **配置 SessionFactory**: - **XML 形式**:使用 `<bean>` 标签来配置 Hibernate 的 `SessionFactory`。 - **Annotation 方式**:通过注解来配置 `SessionFactory`。 - **...

    Spring框架文档 - 核心技术部分 中英双语版 第一部分.pdf

    - **Spring AOP vs AspectJ**:Spring框架内建的AOP易于理解和使用,对于大部分场景足够。但若需要更复杂、更强大的AOP功能,可以集成AspectJ,它是Java领域最成熟、功能最全的AOP实现。 4. **其他核心技术**:...

    spring-framework-2.5.5-with-dependencies.zip

    2. **AOP(面向切面编程)**:Spring提供了一种实现切面编程的机制,允许开发者定义“切面”,并在适当的时候自动插入到代码中,用于日志记录、事务管理等。 3. **数据访问/集成**:Spring提供了对各种持久化技术的...

    spring-2.5.6api文档

    Spring的AOP模块支持在运行时创建动态代理,实现方法拦截,用于日志记录、事务管理、性能监控等。切面可以定义通知(advice)、切点(pointcut)和织入(weaving)等概念,增强了代码的模块化和解耦。 三、Bean的...

    Spring框架文档 - 核心技术部分 中文版 - 第一部分.pdf

    - **Spring AOP与AspectJ集成**:虽然Spring AOP功能强大,但更复杂的场景可能需要使用AspectJ,它是Java领域最成熟、最全面的AOP实现。Spring支持与AspectJ的集成,提供编译时和运行时的AOP代理。 4. **其他核心...

Global site tag (gtag.js) - Google Analytics