81,090
社区成员
发帖
与我相关
我的任务
分享
接口类
Java代码
1. <SPAN style="FONT-SIZE: medium">package com.test.TestSpring3;
2.
3. public interface UserService // 被拦截的接口
4. ...{
5. public void printUser(String user);
6. }
7. </SPAN>
实现类
Java代码
1. <SPAN style="FONT-SIZE: medium">package com.test.TestSpring3;
2.
3. public class UserServiceImp implements UserService // 实现UserService接口
4. ...{
5. public void printUser(String user) ...{
6. System.out.println("printUser user:" + user);// 显示user
7. }
8. }
9.
10. </SPAN>
AOP拦截器
Java代码
1. <SPAN style="FONT-SIZE: medium">package com.test.TestSpring3;
2.
3. import org.aopalliance.intercept.MethodInterceptor;
4. import org.aopalliance.intercept.MethodInvocation;
5.
6. public class UserInterceptor implements MethodInterceptor
7. // AOP方法拦截器
8. ...{
9.
10. public Object invoke(MethodInvocation arg0) throws Throwable ...{
11.
12. try ...{
13.
14. if (arg0.getMethod().getName().equals("printUser"))
15. // 拦截方法是否是UserService接口的printUser方法
16. ...{
17. Object[] args = arg0.getArguments();// 被拦截的参数
18. System.out.println("user:" + args[0]);
19. arg0.getArguments()[0] = "hello!";// 修改被拦截的参数
20.
21. }
22.
23. System.out.println(arg0.getMethod().getName() + "---!");
24. return arg0.proceed();// 运行UserService接口的printUser方法
25.
26. } catch (Exception e) ...{
27. throw e;
28. }
29. }
30. }
31. </SPAN><SPAN style="FONT-SIZE: medium">
32. </SPAN>
测试类
Java代码
1. <SPAN style="FONT-SIZE: medium">package com.test.TestSpring3;
2.
3. import org.springframework.beans.factory.BeanFactory;
4.
5. import org.springframework.beans.factory.xml.XmlBeanFactory;
6. import org.springframework.context.ApplicationContext;
7. import org.springframework.context.support.ClassPathXmlApplicationContext;
8. import org.springframework.context.support.FileSystemXmlApplicationContext;
9. import org.springframework.core.io.ClassPathResource;
10. import org.springframework.core.io.Resource;
11. import org.springframework.web.context.support.WebApplicationContextUtils;
12.
13. public class TestInterceptor ...{
14.
15. public static void main(String[] args) ...{
16. ApplicationContext ctx = new FileSystemXmlApplicationContext(
17. "classpath:applicationContext.xml");
18. // ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
19.
20. UserService us = (UserService) ctx.getBean("userService");
21. us.printUser("shawn");
22.
23. }
24. }</SPAN><SPAN style="FONT-SIZE: medium">
25. </SPAN>
配置文件
Xml代码
1. <SPAN style="FONT-SIZE: medium"><?xml version="1.0" encoding="UTF-8"?>
2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
3. <beans>
4. <bean id="userServiceImp"
5. class="com.test.TestSpring3.UserServiceImp" />
6.
7. <bean id="userInterceptor" class="com.test.TestSpring3.UserInterceptor" />
8.
9. <bean id="userService"
10. class="org.springframework.aop.framework.ProxyFactoryBean">
11. <!-- 代理接口 -->
12. <property name="proxyInterfaces">
13. <value>com.test.TestSpring3.UserService</value>
14. </property>
15. <!-- 目标实现类 -->
16. <property name="target">
17. <ref local="userServiceImp" />
18. </property>
19. <!-- 拦截器 -->
20. <property name="interceptorNames">
21. <list>
22. <value>userInterceptor</value>
23. </list>
24. </property>
25. </bean>
26.
27. </beans>
28. </SPAN>
输出:
user:shawn
printUser---!
printUser user:hello!