日期:2014-05-17 浏览次数:21097 次
1 使用Annotation方式
spring依赖库
* SPRING_HOME/dist/spring.jar
* SPRING_HOME/lib/jakarta-commons/commons-logging.jar
* SPRING_HOME/lib/log4j/log4j-1.2.14.jar
* SPRING_HOME/lib/aspectj/*.jar
使用Aspect定义切入点
package com.travelsky.aop.aspect;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.AfterReturning;
@Aspect
public class serviceAspect {
@Pointcut("execution(* com.travelsky.service..*.*(..))")
public void doBeforeService() {
}
@Pointcut("execution(* com.travelsky.service..*.*(..))")
public void doAfterService() {
}
}
?
定义advice
package com.travelsky.aop.advice;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class serviceAdvice{
@Before("com.travelsky.aop.aspect.serviceAspect.doBeforeService()")
public void doAccessCheck() {
// ...
System.out.println("Aop: do before service.");
}
@AfterReturning("com.travelsky.aop.aspect.serviceAspect.doAfterService()")
public void logInfo() {
// ...
System.out.println("Aop: do after service");
}
}
?
在Spring配置文件applicationContext.xml中配置
<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"
default-autowire="byName" default-lazy-init="true">
<aop:aspectj-autoproxy />
<bean class="com.travelsky.aop.advice.serviceAdvice" />
</bean>
?
2 配置文件方式
spring依赖库
* SPRING_HOME/dist/spring.jar
* SPRING_HOME/lib/jakarta-commons/commons-logging.jar
* SPRING_HOME/lib/log4j/log4j-1.2.14.jar
* SPRING_HOME/lib/aspectj/*.jar
?
在applicationContext.xml中配置
<aop:config>
<!-- 被切入的切面类-->
<aop:aspect id="security" ref="securityHandler">
<!-- 要切入的点(针对哪个切入。表达式方法声明匹配被切入的类及其方法) -->
<aop:pointcut id="allAddMethod" expression="execution(* com.travelsky.security.UserManagerImpl.add*(..))"/>
<!-- 声明切面类的要切入方法及具体位置 -->
<aop:before method="checkSecurity" pointcut-ref="allAddMethod"/>
</aop:aspect>
</aop:config>
?
3 给出一个生产中实际使用的AspectJ管理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: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"
default-autowire="byName" default-lazy-init="true">
<!-- 属性文件读入 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:config.properties</value>
</list>
</property>
</bean>
<!-- 支持 @Transactional 标记 -->
<tx:annotation-driven />
<!-- 支持 @AspectJ 标记-->
<aop:aspectj-auto