论坛首页 Java企业应用论坛

关于AOP的思考和疑问

浏览 5271 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-31  
学习了Spring的相关思想和技术,感觉博大精深,很多不太理解的地方,希望大家能指点迷津。
关于AOP,基础的思想就不多说了,我有一个疑问:
是不是用AOP的前提是主逻辑类必须要是Spring容器创建的啊?比如我的测试类:
ApplicationContext ctx = new FileSystemXmlApplicationContext("/applicationContext.xml");
AOPTest tester = new AOPTest();
AService serviceA = (AService) ctx.getBean("aService");
BServiceImpl serviceB = (BServiceImpl) ctx.getBean("bService");
tester.setAService(serviceA);
tester.setBService(serviceB);
tester.testCall();
但是如果是这样,我的AService和BServiceImpl必须是通过容器创建的,这样就大大限制了使用性。因为如果我想用AOP的思想来扩展现有系统,那首先要修改系统生产bean的逻辑(都从Spring容器创建),这个几乎是不可能实现的。
这样想来,是不是AOP是量身为Spring打造的?但是我看了相关资料,JBoss已经集成了AOP,还有Naning,更不用说AspectJ了,但是对于我自己的系统,有没有更好的解决方案,通过反射的方式织入AOP的思想呢?
请大侠们不吝赐教。
   发表时间:2012-09-01  
aspectJ
0 请登录后投票
   发表时间:2012-09-01  
Kisses99 写道
aspectJ

这个说的太笼统了,能具体的讨论下吗?
0 请登录后投票
   发表时间:2012-09-03  
spring的aop是基于ioc实现的。。
0 请登录后投票
   发表时间:2012-09-03  
LZ 您现在是想用AOP拓展程序吗?你的切面类呢?定义你的切面,然后配置切入点和通知,就行啦。。。

还有“那首先要修改系统生产bean的逻辑(都从Spring容器创建),这个几乎是不可能实现的。 ” 虽然不知道你的需求是什么,但是可以通过配置改变spring容器初始化bean的顺序的  具体你可以看看API中  bean的 生命周期 和 作用域
0 请登录后投票
   发表时间:2012-09-03  
改造原有系统, 把原有系统的new操作都交给spring  改动是不可避免的。 配合注入,在使用aop不就行了, 使用annotation 的方式定义bean  修改还是很容易的。




0 请登录后投票
   发表时间:2012-09-03  
a_alter 写道
改造原有系统, 把原有系统的new操作都交给spring  改动是不可避免的。 配合注入,在使用aop不就行了, 使用annotation 的方式定义bean  修改还是很容易的。





所有系统的new都改成容器生成真的有难度,毕竟系统太过庞大,能有更为简便的方式绕过这个局限行吗?
0 请登录后投票
   发表时间:2012-09-03  
一日一博 写道
LZ 您现在是想用AOP拓展程序吗?你的切面类呢?定义你的切面,然后配置切入点和通知,就行啦。。。

还有“那首先要修改系统生产bean的逻辑(都从Spring容器创建),这个几乎是不可能实现的。 ” 虽然不知道你的需求是什么,但是可以通过配置改变spring容器初始化bean的顺序的  具体你可以看看API中  bean的 生命周期 和 作用域

我的疑问就是我之前的系统是没有使用spring的,现在想用spring的AOP,是不是必须要将原来系统的new操作都改成容器来生成实例呢?如果是的话,那将改动太多。
关于切面,切点,通知我都可以实现,关键是想在不该原来逻辑的情况下,实现aop。
0 请登录后投票
   发表时间:2012-09-03  
aine_pan 写道
一日一博 写道
LZ 您现在是想用AOP拓展程序吗?你的切面类呢?定义你的切面,然后配置切入点和通知,就行啦。。。

还有“那首先要修改系统生产bean的逻辑(都从Spring容器创建),这个几乎是不可能实现的。 ” 虽然不知道你的需求是什么,但是可以通过配置改变spring容器初始化bean的顺序的  具体你可以看看API中  bean的 生命周期 和 作用域

我的疑问就是我之前的系统是没有使用spring的,现在想用spring的AOP,是不是必须要将原来系统的new操作都改成容器来生成实例呢?如果是的话,那将改动太多。
关于切面,切点,通知我都可以实现,关键是想在不该原来逻辑的情况下,实现aop。

说实话,在业务不熟的情况下最后不要改,不然各种问题。。。。

如果非要实现aop你可以只把需要aop的那些bean交给spring管理。


0 请登录后投票
   发表时间:2012-09-04  

在我的知识里面没有办法啊,如果你以前系统没有使用bean容器概念的话,那就相当于以前的对象生成都是硬编码啊,不存在扩展性,系统大的话就只能按模块改好了,也没有必要一次性改完的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics