经过这段日子的学习和使用Spring,慢慢地体会到Spring的优妙之处,正在深入地吸收Spring的精华,
呵呵。现在写的这个只是个简单AOP例子,包括前置通知,后置通知,环绕通知,和目标对象。写这个例子的主要目标只是想让想学AOP的能更快地入门,了解
一下如何去配置AOP里面的东东。
目标对象的接口:IStudent.java
?1
/**
?2
?*?
?3
?
*/
?4
package
?com.dragon.study;
?5
?6
/**
?7
?*?
@author
?dragon
?8
?*
?9
?
*/
10
public
?
interface
?IStudent?
{
11
????
12
????
public
?
void
?addStudent(String?name);
13
}
14

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

目标类:StudentImpl.java
?1
/**
?2
?*?
?3
?
*/
?4
package
?com.dragon.study.Impl;
?5
?6
import
?com.dragon.study.IStudent;
?7
?8
/**
?9
?*?
@author
?dragon
10
?*
11
?
*/
12
public
?
class
?StudentImpl?
implements
?IStudent
{
13
14
?????
public
?
void
?addStudent(String?name)
{
15
?????????System.out.println(
"
欢迎?
"
+
name
+
"
?你加入Spring家庭!
"
);
16
?????}
17
}
18

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15

16

17

18

前置通知:BeforeAdvice.java
?1
/**
?2
?*?
?3
?
*/
?4
package
?com.dragon.Advice;
?5
?6
import
?java.lang.reflect.Method;
?7
?8
import
?org.springframework.aop.MethodBeforeAdvice;
?9
10
/**
11
?*?
@author
?dragon
12
?*
13
?
*/
14
public
?
class
?BeforeAdvice?
implements
?MethodBeforeAdvice
{
15
16
??????
public
?
void
?before(Method?method,Object[]?args,?Object?target)
17
???????????????
throws
?Throwable
{
18
??????????
19
??????????System.out.println(
"
这是BeforeAdvice类的before方法.
"
);
20
??????????
21
??????}
22
}
23

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

后置通知:AfterAdvice.java
?1
/**
?2
?*?
?3
?
*/
?4
package
?com.dragon.Advice;
?5
?6
import
?java.lang.reflect.Method;
?7
?8
import
?org.springframework.aop.AfterReturningAdvice;
?9
10
/**
11
?*?
@author
?dragon
12
?*
13
?
*/
14
public
?
class
?AfterAdvice?
implements
?AfterReturningAdvice
{
15
????
16
????
public
?
void
?afterReturning(Object?returnValue?,Method?method,
17
???????????????????Object[]?args,Object?target)?
throws
?Throwable
{
18
????????System.out.println(
"
这是AfterAdvice类的afterReturning方法.
"
);
19
????}
20
??????
21
22
}
23

?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

环绕通知:CompareInterceptor.java
?1
/**
?2
?*?
?3
?
*/
?4
package
?com.dragon.Advice;
?5
?6
import
?org.aopalliance.intercept.MethodInterceptor;
?7
import
?org.aopalliance.intercept.MethodInvocation;
?8
?9
10
/**
11
?*?
@author
?dragon
12
?*
13
?
*/
14
public
?
class
?CompareInterceptor?
implements
?MethodInterceptor
{
15
16
??????
public
?Object?invoke(MethodInvocation?invocation)?
throws
?Throwable
{
17
??????????Object?result?
=
?
null
;
18
?????????String?stu_name?
=
?invocation.getArguments()[
0
].toString();
19
?????????
if
?(?stu_name.equals(
"
dragon
"
))
{
20
?????????????
//
如果学生是dragon时,执行目标方法,
21
??????????????result
=
?invocation.proceed();
22
??????????????
23
?????????}
?
else
{
24
?????????????System.out.println(
"
此学生是
"
+
stu_name
+
"
而不是dragon,不批准其加入.
"
);
25
?????????}
26
????????
27
??????????
return
?result;
28
??????}
29
}
30

?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

配置文件applicationContext.xml
?1
<?
xml?version="1.0"?encoding="UTF-8"
?>
?2
<!
DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd"
>
?3
?4
<
beans
>
?5
?6
<
bean?
id
="beforeAdvice"
?class
="com.dragon.Advice.BeforeAdvice"
></
bean
>
?7
<
bean?
id
="afterAdvice"
?class
="com.dragon.Advice.AfterAdvice"
></
bean
>
?8
<
bean?
id
="compareInterceptor"
?class
="com.dragon.Advice.CompareInterceptor"
></
bean
>
?9
<
bean?
id
="studenttarget"
?class
="com.dragon.study.Impl.StudentImpl"
></
bean
>
10
11
<
bean?
id
="student"
?class
="org.springframework.aop.framework.ProxyFactoryBean"
>
12
??
<
property?
name
="proxyInterfaces"
>
13
????
<
value
>
com.dragon.study.IStudent
</
value
>
14
??
</
property
>
15
??
<
property?
name
="interceptorNames"
>
16
????
<
list
>
17
?????
<
value
>
beforeAdvice
</
value
>
18
?????
<
value
>
afterAdvice
</
value
>
19
????
<
value
>
compareInterceptor
</
value
>
??
20
????
</
list
>
21
??
</
property
>
22
??
<
property?
name
="target"
>
23
????
<
ref?
bean
="studenttarget"
/>
24
??
</
property
>
25
26
</
bean
>
27
28
29
30
31
</
beans
>

?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

? 现在开始写测试类,Test.java
?1
/**
?2
?*?
?3
?
*/
?4
package
?com;
?5
?6
import
?org.springframework.context.ApplicationContext;
?7
import
?org.springframework.context.support.FileSystemXmlApplicationContext;
?8
?9
import
?com.dragon.study.IStudent;
10
11
/**
12
?*?
@author
?dragon
13
?*
14
?
*/
15
public
?
class
?Test?
{
16
17
????
/**
18
?????*?
@param
?args
19
?????
*/
20
????
public
?
static
?
void
?main(String[]?args)?
{
21
????????
//
?TODO?Auto-generated?method?stub
22
??????ApplicationContext?ctx?
=
?
23
??????????
new
?FileSystemXmlApplicationContext(
"
/com/dragon/applicationContext.xml
"
);
24
??????
25
??????IStudent?person?
=
?(IStudent)ctx.getBean(
"
student
"
);
26
??????person.addStudent(
"
dragon
"
);
27
??????
28
//
??????person.addStudent("javadragon");
29
????}
30
31
}
32

?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
