学习了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的思想呢?
请大侠们不吝赐教。

解决方案 »

  1.   

    AOP只是一个概念 是面向切面概念 不仅仅spring才有的 是一种技术吧
    用spring当然要用spring容器创建,你也可以不用spring容器,那就自己代码实现一个。
    IOC是spring核心思想哇。
      

  2.   

    Spring 中的 AOP 都不是自己实现的,采用了 JDK 的动态代理、Cglib + ASM 的动态代理,以及 AOP 框架 AspectJ 的语法。顺带说一下,AspectJ 这个框架可以算作是 AOP 事实上的标准。
      

  3.   

    如果我现在想对我的一个系统扩展的话,就是对其使用AOP的事务和日志功能,那是不是必须修改系统的架构,用Spring的容器去创建所有的类啊?
    能实现动态的加载吗?或者无须修改原系统的织入呢?
      

  4.   

    AOP面向切面编程,让业务逻辑和事务管理等非逻辑处理分离开来,在很多开源框架中都运用到了该技术,比如Hibernate中
      

  5.   

    AOP只是一个思想,提高代码的可复用性,你可以有多种自己的实现方式
      

  6.   

    这个可以这么理解,因为Web容器提供了这样的接口,我们可以通过配filter来截取请求。
    但是在我们自己的系统中,这样的接口似乎不那么容易实现。