第五章 Spring进阶-注解方式实现AOP(1)

简介:
徒弟: 师傅,我以前:
使用JDK中的Proxy技术实现AOP功能
使用CGLIB实现AOP功能
使用编程式创建AOP代理
非常繁琐,本来好好的一天的时间,我可以快快乐乐乐完成了某个业务流程,很有成就感,却被这些繁琐的实现方式,毁了我美好的一天,有没有办法救救我呀,有的话,请你吃饭!
师傅: 这么好的差事,还有饭吃 (心里想着毛家、周边的餐馆 ,真爽) ,当然要教!
补充:
个人认为:工作的时候,我们应该更加关注业务逻辑的实现,一些繁琐的使用方式,应该成为茶余饭后研究的乐趣。
要进行AOP编程,首先我们要在配置文件中引入aop命名空间;
<?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:aop="http://www.springframework.org/schema/aop"      
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
            http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
</beans>
Spring提供了两种切面使用方式,可以根据实际工作情况,选用其中一种:
1、  基于XML配置方式进行AOP开发
2、  基于注解方式进行AOP开发
为了更快地完成配置,将焦点转移到业务逻辑中,我选择了第二种(其实是为了更快地把吃饭的事情确定下来)
     既然讲到配置文件,就先将aop的配置开关打开吧,配置文件中加入:
<aop:aspectj-autoproxy/>
哎呀,太着急了,还得 加入两个包:
lib/aspectj/aspectjweaver.jar
lib/aspectj/aspectjrt.jar
     新增加一个类:
/**
 * Book切面
 */
@Aspect
public   class  BookInterceptor {
  @Pointcut ( "execution (* com.netease.lee.service..*.*(..))" )
  private   void   anyMethod()  {
    // System.out.println("anyMethod");
  } // 声明一个切入点
  /*
   * 首先拦截所有方法的执行 然后在方法之前,执行前置通知,
   * 执行完前置通知之后,才会执行被拦截到的方法。
   * 切入点的名称,附加条件:要求有String类型的参数
   * 即这里只拦截saveBook(String bookName)方法
   */
  @Before ( "anyMethod() && args(bookName)" )
  public   void  doBefore(String bookName) {
    System. out .println( "前置通知:"  + bookName);
  }
  @AfterReturning (pointcut =  "anyMethod()" , returning =  "result" )
  public   void  doAfterReturning(String result) {
    System. out .println( "后置通知:"  + result);
  }
  @After ( "anyMethod()" )
  public   void  doAfter() {
    System. out .println( "最终通知" );
  }
  @AfterThrowing (pointcut =  "anyMethod()" , throwing =  "e" )
  public   void  doAfterThrowing(Exception e) {
    System. out .println( "例外通知:"  + e);
  }
  //环绕通知可以替代前面的任何通知
  @Around ( "anyMethod()" )
  public  Object doAround(ProceedingJoinPoint pjp) 
throws  Throwable {
    System. out .println( " 环绕通知 进入方法" );
    Object result = pjp.proceed();
    System. out .println( " 环绕通知 退出方法" );
    return  result;
  }
}
@Pointcut ( "execution (* com.netease.lee.service..*.*(..))" )
第一个 * 代表任何的返回值类型 com.netease.lee.service 是包名。
.. 两点,说明对子包里面的类也要拦截。
*.* 说明:第一个*代表所有类,第二个*代表所有方法。
(..) 说明:括号里面的两点,代表方法的参数,这里代表随意。
@Before ( "anyMethod() && args(name)" )
前置通知,填入的是切入点的名称。
附上代码:
@Service ( "bookService" )
public   class  BookServiceImpl  implements  BookService {
  @Resource
  private  BookDAO  bookDAO ;
  public   void  listBook() {
    bookDAO .listBook();
  }
  @Override
  public  String getBookName(Integer bookId) {
    return   bookDAO .getBookName(bookId);
  }
  @Override
  public   void  saveBook(String bookName) {
    bookDAO .saveBook(bookName);
  }
  @Override
  public   void  updateBoook(String bookName, Integer bookId) {
    bookDAO .updateBook(bookName, bookId);
  }
}
    运行结果这里就不演示了,赶着去吃饭了!徒弟说不行,这样子的话,如果他写了几十个切面类,别人过来看,岂不是不能“纵观全局”,有没有好办法,一看就知道项目里面配置了哪些切面类,定义了什么?
 
    由于篇幅问题,请看:第五章 Spring进阶-注解方式实现AOP(2)
关注我的微博,请使用网易通行证,通过邀请链接登陆,就可以直接关注我。
相关文章
|
18天前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
44 5
|
19天前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
35 4
|
22天前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
19天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
59 2
|
19天前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
40 2
|
22天前
|
XML 监控 安全
深入调查研究Spring AOP
【11月更文挑战第15天】
35 5
|
22天前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
33 4
|
19天前
|
前端开发 Java 开发者
Spring MVC中的控制器:@Controller注解全解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序控制层的核心。它不仅简化了控制器的定义,还提供了灵活的请求映射和处理机制。本文将深入探讨`@Controller`注解的用法、特点以及在实际开发中的应用。
52 0
|
3月前
Micronaut AOP与代理机制:实现应用功能增强,无需侵入式编程的秘诀
AOP(面向切面编程)能够帮助我们在不修改现有代码的前提下,为应用程序添加新的功能或行为。Micronaut框架中的AOP模块通过动态代理机制实现了这一目标。AOP将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,提高模块化程度。在Micronaut中,带有特定注解的类会在启动时生成代理对象,在运行时拦截方法调用并执行额外逻辑。例如,可以通过创建切面类并在目标类上添加注解来记录方法调用信息,从而在不侵入原有代码的情况下增强应用功能,提高代码的可维护性和可扩展性。
67 1
|
1月前
|
安全 Java 编译器
什么是AOP面向切面编程?怎么简单理解?
本文介绍了面向切面编程(AOP)的基本概念和原理,解释了如何通过分离横切关注点(如日志、事务管理等)来增强代码的模块化和可维护性。AOP的核心概念包括切面、连接点、切入点、通知和织入。文章还提供了一个使用Spring AOP的简单示例,展示了如何定义和应用切面。
118 1
什么是AOP面向切面编程?怎么简单理解?