Spring3基于注释驱动的AOP
<!--启动spring的aop自动代理--> <aop:aspectj-autoproxy/>
然后再创建一个AOP类
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.pdp.biz.dao.usermanage.UserDAO; /** * ClassName:DemoAop * Reason: TODO ADD REASON * * @author 王涛 * @version * @since Ver 1.1 * @Date 2010-11-24 上午10:25:18 * */ @Aspect @Service public class DemoAop { @Autowired public UserDAO userDao; @After("execution(public * com.pdp.biz.service.usermanage.impl.UserManageServiceImpl.sayhi(..))") public void doAfter(JoinPoint jp) { System.out.println(userDao.findUsersCount(null)); Object[] args = jp.getArgs(); for(Object obj : args){ System.out.println("参数值:"+obj); } System.out.println("后处理切入----------"+jp.getTarget().getClass().getName()+"----"+jp.getSignature().getName()); } }
里面的注释分别是@Aspect用于告诉Spring这个是一个需要织入的类,
@After("execution(public * com.pdp.biz.service.usermanage.impl.UserManageServiceImpl.sayhi(..))") public void doAfter(JoinPoint jp) { ... }
里面的doAfter方法上面有一行注释,指明这个方法将在UserManageServiceImpl.sayhi(..)方法运行结束之后来执行,参数JoinPoint主要携带了参数值和方法名什么的,到时候自己查查文档就ok了
All Known Subinterfaces: ProceedingJoinPoint
public interface JoinPoint
Provides reflective access to both the state available at a join point and static information about it. This information is available from the body of advice using the special form thisJoinPoint
. The primary use of this reflective information is for tracing and logging applications.
aspect Logging {
before(): within(com.bigboxco..*) && execution(public * *(..)) {
System.err.println("entering: " + thisJoinPoint);
System.err.println(" w/args: " + thisJoinPoint.getArgs());
System.err.println(" at: " + thisJoinPoint.getSourceLocation());
}
}
Nested Class Summary | |
---|---|
static interface | JoinPoint.EnclosingStaticPart |
static interface | JoinPoint.StaticPart This helper object contains only the static information about a join point. |
Field Summary | |
---|---|
static java.lang.String | ADVICE_EXECUTION |
static java.lang.String | CONSTRUCTOR_CALL |
static java.lang.String | CONSTRUCTOR_EXECUTION |
static java.lang.String | EXCEPTION_HANDLER |
static java.lang.String | FIELD_GET |
static java.lang.String | FIELD_SET |
static java.lang.String | INITIALIZATION |
static java.lang.String | METHOD_CALL |
static java.lang.String | METHOD_EXECUTION The legal return values from getKind() |
static java.lang.String | PREINITIALIZATION |
static java.lang.String | STATICINITIALIZATION |
static java.lang.String | SYNCHRONIZATION_LOCK |
static java.lang.String | SYNCHRONIZATION_UNLOCK |
Method Summary | |
---|---|
java.lang.Object[] | getArgs() Returns the arguments at this join point. |
java.lang.String | getKind() Returns a String representing the kind of join point. |
Signature | getSignature() Returns the signature at the join point. |
SourceLocation | getSourceLocation() Returns the source location corresponding to the join point. |
JoinPoint.StaticPart | getStaticPart() Returns an object that encapsulates the static parts of this join point. |
java.lang.Object | getTarget() Returns the target object. |
java.lang.Object | getThis() Returns the currently executing object. |
java.lang.String | toLongString() Returns an extended string representation of the join point. |
java.lang.String | toShortString() Returns an abbreviated string representation of the join point. |
java.lang.String | toString() |
运行的时候直接运行就ok了.
@Test public void testgetUsers(){ userManageService.sayhi("Hi 大家好~!"); }