1: 首先我们要定义 配置成切面的类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 |
package cn.gbx.example; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; public
class MyXmlIntercept { public
void doAccessCheck() { System. out .println( "前置通知" ); } public
void doAfterReturning() { System. out .println( "后置通知" ); } public
void doAfter() { System. out .println( "最终通知" ); } public
void doAfterThrowing() { System. out .println( "例外通知" ); } public
Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable { System. out .println( "进入方法" ); Object value = pjp.proceed(); System. out .println( "退出方法" ); return
value; } } |
然后再XML文件中将其配置成切面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
<?xml version= "1.0"
encoding= "UTF-8" ?> <beans xmlns= "http://www.springframework.org/schema/beans" xsi:schemaLocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-2.5.xsd http: //www.springframework.org/schema/context http: //www.springframework.org/schema/context/spring-context-2.5.xsd http: //www.springframework.org/schema/aop http: //www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <aop:aspectj-autoproxy/> <bean id= "personService"
class = "cn.gbx.serviceimpl.PersonServiceImpl" ></bean> <bean id= "myXmlIntercept"
class = "cn.gbx.example.MyXmlIntercept" ></bean> <aop:config> <aop:aspect id= "myasp"
ref = "myXmlIntercept" > <aop:pointcut expression= "execution (* cn.gbx.serviceimpl.PersonServiceImpl.*(..))"
id= "mycut" /> <aop:before method= "doAccessCheck"
pointcut- ref = "mycut" /> <aop:after-returning pointcut- ref = "mycut"
method= "doAfterReturning" /> <aop:after-throwing pointcut- ref = "mycut"
method= "doAfterThrowing" /> <aop:after pointcut- ref = "mycut"
method= "doAfter" /> <aop:around pointcut- ref = "mycut"
method= "doBasicProfiling" /> </aop:aspect> </aop:config> </beans> |
然后测试即可。
简单说明
1 |
expression= "execution (* cn.gbx.serviceimpl.PersonServiceImpl.*(..))" <br>如果我们要要返回值烈性为Stirng的 方法才被拦截 |
1 |
execution (java.lang.String cn.gbx.serviceimpl.PersonServiceImpl.*(..))<br><br>如果我们要求参数第一个为String , 后边不限 |
1 |
expression= "execution (* cn.gbx.serviceimpl.PersonServiceImpl.*(java.lang.String, ..))" <br><br>要求返回至为非 void |
1 |
expression= "execution (!void cn.gbx.serviceimpl.PersonServiceImpl.*(..))" <br><br><br> |
1 |
<br><br> |
原文:http://www.cnblogs.com/E-star/p/3560964.html