Spring AOP使用配置介绍(二):切面的配置

在文章(一)中已经介绍了增强的使用,此篇介绍切面的配置方法。

创建静态普通方法名匹配的切面:

package com.maxjay.bank.advice;

import java.lang.reflect.Method;

import org.springframework.aop.ClassFilter;
import org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor;

import com.maxjay.bank.service.UserService;

/**
* 静态普通方法名匹配切面定义
* @author Administrator
*
*/
public class ValidateUserAdvisor extends StaticMethodMatcherPointcutAdvisor {

/**
*
*/
private static final long serialVersionUID = 1L;

/**
* 只对validateUser进行拦截
*/
public boolean matches(Method method, Class targetClass) {
// 此次可以使用正则表达式来匹配
return "validateUser".equals(method.getName());
}

public ClassFilter getClassFilter() {
return new ClassFilter() {
public boolean matches(Class clazz) {
return UserService.class.isAssignableFrom(clazz);
}
};
}
}


该类中的matches方法用来确定哪些方法需要执行增强中的内容;getClassFilter则确定哪些类需要被代理,这个方法在使用自动创建代理时会很有用。

在spring配置文件中配置切面:

<bean id="validateUserAdvisor" class="com.maxjay.bank.advice.ValidateUserAdvisor">
<property name="advice">
<ref bean="loggerBeforeAdvice" />
</property>
</bean>

其中loggerBeforeAdvice是(一)中已经定义过的增强。
配置代理类:

<!--
配置单个bean的代理,在使用时不能用原有bean的id要用AppContext.get("singleLoginProxy")从context中获取(见测试类LoggerAdviceTest)
-->
<bean id="singleLoginProxy" class="org.springframework.aop.framework.ProxyFactoryBean">

<property name="proxyInterfaces">
<value>com.maxjay.bank.service.UserService</value>
</property>

<property name="interceptorNames">
<list>
<value>validateUserAdvisor</value>
</list>
</property>

<property name="target">
<ref bean="userService" />
</property>

<!-- 设置是否直接代理类(默认为false):true即使用cglib生成代理类,此时target对象不可以是JDK动态代理过的bean;false则使用JDK动态代理 -->
<property name="proxyTargetClass">
<value>true</value>
</property>
</bean>

注意此处配置与(一)中只有interceptorNames换成了我们刚刚配置的那个切面。

此外也可以使用静态正则表达式方法匹配来创建切面,代码如下

<!-- 定义静态正则表达式方法名匹配切面 -->
<bean id="regexpAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="patterns">
<list>
<value>.*get.*</value>
</list>
</property>
<property name="advice">
<ref bean="loggerBeforeAdvice" />
</property>
</bean>

其中.*get.*是标准的正则表达式语言,它匹配那些名称种包含get的方法
通过上面的步骤我们就定义完了切面了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值