春天aopframework实现

时间:2023-03-08 17:21:19
Java的代码  春天aopframework实现
  1. 包 cn.itcast.day3.aopframework;
  2. 进口 java.io.IOException的;
  3. 进口 的java.io.InputStream;
  4. 进口 java.util.Properties;
  5. 进口 cn.itcast.day3.Advice;
  6. 公共 类 的BeanFactory {
  7. 属性道具=  新 特性();
  8. 公共 Bean工厂(IPS的InputStream){
  9. 尝试 {
  10. props.load(IPS);
  11. }  赶上 (IOException异常E){
  12. e.printStackTrace();
  13. }
  14. }
  15. 公共 对象的getBean(字符串名称){
  16. 弦乐的className = props.getProperty(名称);
  17. 对象豆=  空;
  18. 尝试 {
  19. clazz类=的Class.forName(类名);
  20. 豆= clazz.newInstance();
  21. }  赶上 (例外五){
  22. e.printStackTrace();
  23. }
  24. 如果(豆  的instanceof  的ProxyFactoryBean){
  25. 对象代理=  空;
  26. ProxyFactoryBean中的ProxyFactoryBean =(ProxyFactoryBean里)豆;
  27. 尝试 {
  28. 意见建议=(咨询)的Class.forName(props.getProperty(姓名+  “.advice” ))的newInstance()。
  29. 对象目标=的Class.forName(props.getProperty(名称+  “的.target” ))的newInstance()。
  30. proxyFactoryBean.setAdvice(咨询);
  31. proxyFactoryBean.setTarget(目标);
  32. 代理= proxyFactoryBean.getProxy();
  33. }  赶上 (例外五){
  34. e.printStackTrace();
  35. }
  36. 返回 代理;
  37. }
  38. 返回 豆;
  39. }
  40. }
  41. 包 cn.itcast.day3.aopframework;
  42. 进口 的java.io.InputStream;
  43. 进口 java.util.Collection的;
  44. 公共 类 AopFrameworkTest {
  45. / **
  46. * @参数的args
  47. * /
  48. 公共 静态 无效 的主要(字串[]
    args)  抛出 异常{
  49. // TODO自动生成方法存根
  50. InputStream的IPS = AopFrameworkTest。类.getResourceAsStream(“config.properties” );
  51. 对象豆=  新 的BeanFactory(IPS).getBean(“XXX” );
  52. 的System.out.println(bean.getClass()的getName());
  53. ((集合)豆).clear();
  54. }
  55. }
  56. 包 cn.itcast.day3.aopframework;
  57. 进口 java.lang.reflect.InvocationHandler;
  58. 进口 java.lang.reflect.Method中;
  59. 进口 java.lang.reflect.Proxy;
  60. 进口 cn.itcast.day3.Advice;
  61. 公共 类 的ProxyFactoryBean {
  62. 私人 咨询建议;
  63. 私人 对象的目标;
  64. 公众 咨询getAdvice(){
  65. 返回 意见;
  66. }
  67. 公共 无效 setAdvice(咨询意见){
  68. 这.advice =意见;
  69. }
  70. 公共 对象了getTarget(){
  71. 返回 的目标;
  72. }
  73. 公共 无效 setTarget(目标对象){
  74. 这.TARGET =目标;
  75. }
  76. 公共 对象的getProxy(){
  77. // TODO自动生成方法存根
  78. 反对Proxy3服务器= Proxy.newProxyInstance(
  79. target.getClass()。getClassLoader(),
  80. / *新的Class [] {} Collection.class,* /
  81. target.getClass()。getInterfaces(),
  82. 新 的InvocationHandler(){
  83. 公共 对象调用(对象代理,方法的方法,对象[]参数)
  84. 抛出 的Throwable
  85. / *长BEGINTIME = System.currentTimeMillis的();
  86. 对象retVal的= method.invoke(目标参数);
  87. 长endTime的= System.currentTimeMillis的();
  88. 的System.out.println(method.getName()+“运行时间”+(endTime的 - BEGINTIME));
  89. 返回retVal的; * /
  90. advice.beforeMethod(法);
  91. 对象retVal的= method.invoke(目标参数);
  92. advice.afterMethod(法);
  93. 返回 retVal的;
  94. }
  95. }
  96. );
  97. 返回 Proxy3发出;
  98. }
  99. }
  100. config.properties
  101. #XXX =的java.util.ArrayList
  102. XXX = cn.itcast.day3.aopframework.ProxyFactoryBean
  103. xxx.advice = cn.itcast.day3.MyAdvice
  104. xxx.target =的java.util.ArrayList