Spring中的5种通知和3种加载通知的方式介绍。
Spring中的5种通知
前置通知:
Code:
01.
04.public class EmpBeforeAdvice implements MethodBeforeAdvice {
05. @Override
06. public void before(Method arg0, Object[] arg1, Object target)
07. throws Throwable {
08. System.out.println(“这里是before方法”);
09. System.out.println(“方法的名字:”+arg0+”方法的参数:”+arg1.length+”目标对象:”+target);
10. System.out.println(“===================”);
11.
12. }
13.}
后置通知:
Code:
01.
04.public class EmpAfterAdvice implements AfterReturningAdvice {
05. @Override
06. public void afterReturning(Object arg0, Method arg1, Object[] arg2,
07. Object target) throws Throwable {
08. // TODO Auto-generated method stub
09. System.out.println(“这里是afterReturning方法!”);
10. System.out.println(“返回的对象:” + arg0 + “调用的方法的名字:” + arg1 + “方法的参数:”
11. + arg2.length + “目标对象:” + target);
12. System.out.println(“======================”);
13.
14. }
15.}
环绕通知:
Code:
01.
04.public class EmpReturning implements MethodInterceptor{
05. @Override
06. public Object invoke(MethodInvocation arg0) throws Throwable {
07. // TODO Auto-generated method stub
08. System.out.println(“invoke方法的开始”);
09. Object obj=arg0.proceed();//让他执行目标方法
10. System.out.println(“invoke方法的结束”);
11. System.out.println(“=====================”);
12. return obj;//如果返回的是null的话,就会报错
13. }
14.}
异常通知:
Code:
01.
04.public class EmpException implements ThrowsAdvice {
05. public void afterThrowing(Method method, Object[] args, Object target,
06. Exception ex) {
07. System.out.println(“这里是afterThrowing方法!”);
08. System.out.println(“调用方法的名字是:” + method + “方法的参数的个数:” + args.length
09. + “调用的目标对象:” + target + “抛出的异常:” + ex);
10. System.out.println(“================”);
11. }
12.}
引用通知:待写
3种加载通知的方式
用代理类加载方式:
Code:
01.<!– 前置通知 –>
02. <bean id=”empBeforeAdvice” class=”cn.csdn.aop.EmpBeforeAdvice” />
03. <!– 后置通知(方法的操作之后进行处理) –>
04. <bean id=”empAfterAdvice” class=”cn.csdn.aop.EmpAfterAdvice” />
05. <!– 环绕通知(方法执行前后处理) –>
06. <bean id=”empReturning” class=”cn.csdn.aop.EmpReturning” />
07. <!– 异常通知(方法执行期间出现bug的时候) –>
08. <bean id=”empException” class=”cn.csdn.aop.EmpException” />
09. <!– 目标类 –>
10. <bean id=”empServiceImpl” class=”cn.csdn.service.EmpServiceImpl”>
11. <property name=”worktime”>
12. <value>my worktime is 8 hours!</value>
13. </property>
14. </bean>
15. <!– 配置一个静态的advisor –>
16. <bean id=”slbeforeadvistor”
17. class=”org.springframework.aop.support.NameMatchMethodPointcutAdvisor”>
18. <property name=”advice” ref=”empBeforeAdvice”></property>
19. <property name=”mappedNames”>
20. <list>
21. <value>sleep</value>
22. </list>
23. </property>
24. </bean>
25. <!– 配置另一个静态的advisor –>
26. <bean id=”wkaroundAdvisor”
27. class=”org.springframework.aop.support.NameMatchMethodPointcutAdvisor”>
28. <property name=”advice” ref=”empReturning”></property>
29. <property name=”mappedNames”>
30. <list>
31. <value>work</value>
32. </list>
33. </property>
34. </bean>
35. <!– 代理–>
36. <bean id=”proxyFactoryBean” class=”org.springframework.aop.framework.ProxyFactoryBean”>
37.
38. <!– 设置代理的名称proxyInterfaces –>
39. <property name=”proxyInterfaces”>
40. <list>
41. <value>cn.csdn.service.EmpService</value>
42. </list>
43. </property>
44. <!– 拦截的名称 –>
45. <property name=”interceptorNames”>
46. <list>
47. <!–在这定义那个通知,就加载那个通知
48. <value>empBeforeAdvice</value> <value>empAfterAdvice</value>
49. <value>empReturning</value> <value>empException</value>
50. –>
51. <value>slbeforeadvistor</value>
52. <value>wkaroundAdvisor</value>
53.
54. </list>
55. </property>
56.
57. <!– 目标对象 –>
58. <property name=”target” ref=”empServiceImpl” />
59. </bean>
默认的自动加载通知:
Code:
01.<!– 前置通知 –>
02. <bean id=”empBeforeAdvice” class=”cn.csdn.aop.EmpBeforeAdvice” />
03. <!– 后置通知(方法的操作之后进行处理) –>
04. <bean id=”empAfterAdvice” class=”cn.csdn.aop.EmpAfterAdvice” />
05. <!– 环绕通知(方法执行前后处理) –>
06. <bean id=”empReturning” class=”cn.csdn.aop.EmpReturning” />
07. <!– 异常通知(方法执行期间出现bug的时候) –>
08. <bean id=”empException” class=”cn.csdn.aop.EmpException” />
09. <!– 目标类 –>
10. <bean id=”empServiceImpl” class=”cn.csdn.service.EmpServiceImpl”>
11. <property name=”worktime”>
12. <value>my worktime is 8 hours!</value>
13. </property>
14. </bean>
15.
16. <!– 配置一个静态的advisor –>
17. <bean id=”slbeforeadvistor”
18. class=”org.springframework.aop.support.NameMatchMethodPointcutAdvisor”>
19. <property name=”advice” ref=”empBeforeAdvice”></property>
20. <property name=”mappedNames”>
21. <list>
22. <value>sleep</value>
23. </list>
24. </property>
25. </bean>
26. <!– 配置另一个静态的advisor –>
27. <bean id=”wkaroundAdvisor”
28. class=”org.springframework.aop.support.NameMatchMethodPointcutAdvisor”>
29. <property name=”advice” ref=”empReturning”></property>
30. <property name=”mappedNames”>
31. <list>
32. <value>work</value>
33. </list>
34. </property>
35. </bean>
36. <!– 声明引入的通知 –>
37. <bean id=”modifyDateImpl” class=”cn.csdn.service.ModifyDateImpl” />
38. <!– 引入通知配置一个advisor –>
39. <bean id=”DefaultIntroductionAdvisor”
40. class=”org.springframework.aop.support.DefaultIntroductionAdvisor”>
41. <constructor-arg ref=”modifyDateImpl”></constructor-arg>
42. </bean>
43. <bean id=”defaultAdvisorAutoProxyCreator” class=”org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator” />
44.
Nameauto:
Code:
01.<!– 前置通知 –>
02. <bean id=”empBeforeAdvice” class=”cn.csdn.aop.EmpBeforeAdvice” />
03. <!– 后置通知(方法的操作之后进行处理) –>
04. <bean id=”empAfterAdvice” class=”cn.csdn.aop.EmpAfterAdvice” />
05. <!– 环绕通知(方法执行前后处理) –>
06. <bean id=”empReturning” class=”cn.csdn.aop.EmpReturning” />
07. <!– 异常通知(方法执行期间出现bug的时候) –>
08. <bean id=”empException” class=”cn.csdn.aop.EmpException” />
09.
10.
11.
12. <!– 目标类 –>
13. <bean id=”empServiceImpl” class=”cn.csdn.service.EmpServiceImpl”>
14. <property name=”worktime”>
15. <value>my worktime is 8 hours!</value>
16. </property>
17. </bean>
18.
19. <!– 配置一个静态的advisor –>
20. <bean id=”slbeforeadvistor”
21. class=”org.springframework.aop.support.NameMatchMethodPointcutAdvisor”>
22. <property name=”advice” ref=”empBeforeAdvice”></property>
23. <property name=”mappedNames”>
24. <list>
25. <value>sleep</value>
26. </list>
27. </property>
28. </bean>
29.
30.
31. <!– 配置另一个静态的advisor –>
32. <bean id=”wkaroundAdvisor”
33. class=”org.springframework.aop.support.NameMatchMethodPointcutAdvisor”>
34. <property name=”advice” ref=”empReturning”></property>
35. <property name=”mappedNames”>
36. <list>
37. <value>work</value>
38. </list>
39. </property>
40. </bean>
41.
42. <!– 声明引入的通知 –>
43. <bean id=”modifyDateImpl” class=”cn.csdn.service.ModifyDateImpl” />
44. <!– 引入通知配置一个advisor –>
45. <bean id=”DefaultIntroductionAdvisor”
46. class=”org.springframework.aop.support.DefaultIntroductionAdvisor”>
47. <constructor-arg ref=”modifyDateImpl”></constructor-arg>
48. </bean>
49.
50. <!– 根据名字自动代理 –>
51. <bean id=”beanNameAutoProxyCreator”
52. class=”org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>
53. <!– 目标对象 –>
54. <property name=”beanNames”>
55. <value>empServiceImpl</value>
56. </property>
57. <!–拦截的名称 –>
58. <property name=”interceptorNames”>
59. <list>
60. <!–
61. <value>empBeforeAdvice</value> <value>empAfterAdvice</value>
62. <value>empReturning</value> <value>empException</value>
63. –>
64.
65. <value>wkaroundAdvisor</value>
66. <value>DefaultIntroductionAdvisor</value>
67. </list>
68. </property>
69.
70. </bean>
转自:http://blog.csdn.net/hongmeikaile/article/details/6523067