菜鸟学习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。