菜鸟学习Spring——60s使用annotation实现简单AOP

最后更新于:2022-04-01 09:34:04

## 一、概述。 AOP大家都知道切面编程,在Spring中annotation可以实现简单的AOP列子。下面还未大家介绍几个概念: Aspect 对横切性关注点的模块化。 Advice 对横切性关注点的具体实现。 Pointcut 它定义了Advice应用到哪些JoinPoint上,对Spring来说是方法调用。 JoinPoint Advice在应用程序上执行的点或时机,Spring只支持方法的JoinPoint,这个点也可以使属性修改,如:Aspecj可以支持。 Weave 将Advice应用到Target Object上的过程叫织入,Spring支持的是动态织入。 Target Object Advice被应用的对象。 Proxy Spring AOP默认使用JDK的动态代理,它的代理是运行时创建,也可以使用CGLIB代理。 ## 二、代码演示。 为了实现使用annotation实现简单AOP我们还得加入下面几个包: SPRING_HOME/lib/aspectj/*.jar 目录结构: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-22_56caddfbe55ec.jpg) UserManager.java和UserManagerImpl.java代码参照 [http://blog.csdn.net/gwblue/article/details/39668211](http://blog.csdn.net/gwblue/article/details/39668211) 中的UserManager.java和方法二的UserManagerImpl.java SecurityHandler.java ~~~ package com.tgb.spring; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @Aspect public class SecurityHandler{ /** *确定需要使用checkSecurity使用方法的范围 */ @Pointcut("execution(* add*(..))") private void addAddMethod(){} /** *Before是指在执行方法之前运行 *After是只在执行方法之后运行 */ @Before("addAddMethod()") private void checkSecurity(){ System.out.println("checkSecurity"); } } ~~~ Client.java ~~~ package com.tgb.spring; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.tgb.spring.UserManager; public class Client { public static void main(String[] args) { BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml"); UserManager userManager=(UserManager) factory.getBean("userManager"); userManager.addUser("张三", "123"); userManager.delUser(1); } } ~~~ applcationContext.xml ~~~ <?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <!-- 启用AspectJ --> <aop:aspectj-autoproxy/> <bean id="userManager" class="com.tgb.spring.UserManagerImpl" /> <bean id="securityHandler" class="com.tgb.spring.SecurityHandler"/> </beans> ~~~ 效果图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-22_56caddfc08eee.jpg) ## 三、综述。 利用annotation方式简单的实现了AOP,注解是一种侵入性比较强的AOP实现方式,它的优点是让开发者更加方便的使用AOP。
';