菜鸟学习Spring——60s使用annotation实现简单AOP
一、概述。
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
目录结构:
UserManager.java和UserManagerImpl.java代码参照
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>
效果图:
三、综述。
利用annotation方式简单的实现了AOP,注解是一种侵入性比较强的AOP实现方式,它的优点是让开发者更加方便的使用AOP。
Meet so Meet.
C plusplus
I-PLUS....