0 0

Spring 3.2.2 AOP引入方式集成测试的问题5

有如下一个配置

 

    <context:component-scan base-package="com.myapp.aop.introduce" />
    <bean id="forumService" class="org.springframework.aop.framework.ProxyFactoryBean"
        p:interfaces="com.myapp.aop.introduce.Monitorable" p:target-ref="forumServiceTarget"
        p:interceptorNames="pmonitor" p:proxyTargetClass="true" />

 

 

在第一个测试中

 

@Test
    public void test() {
        String configPath = "/aop/introduce/applicationContext.xml";
        ApplicationContext ctx = new ClassPathXmlApplicationContext(configPath);
        ForumService forumService = (ForumService) ctx.getBean("forumService");
        forumService.removeForum(10);
        forumService.removeTopic(1022);
        Monitorable moniterable = (Monitorable) forumService;
        moniterable.setMonitorActive(true);
        forumService.removeForum(10);
        forumService.removeTopic(1022);
    }

可以正常运行

 

通过@ContextConfiguration加载配置文件,方法如下

 

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/aop/introduce/applicationContext.xml" })
public class ForumServiceTest{

    @Autowired
    @Qualifier(value = "forumService")
    ForumService forumService;

    @Test
    public void test() {
        forumService.removeForum(10);
        forumService.removeTopic(1022);
        Monitorable moniterable = (Monitorable)forumService;
        moniterable.setMonitorActive(true);
        forumService.removeForum(10);
        forumService.removeTopic(1022); 
    }
}

抛出org.springframework.beans.factory.NoSuchBeanDefinitionException的异常,指向forumService不存在

 

其他主要代码:

public interface Monitorable{
    void setMonitorActive(boolean active);
}
@Component(value = "pmonitor")
public class ControllablePerformaceMonitor extends DelegatingIntroductionInterceptor implements Monitorable{
    private static final long serialVersionUID = 7120067058565963790L;
    private ThreadLocal<Boolean> MonitorStatusMap = new ThreadLocal<Boolean>();

    public void setMonitorActive(boolean active) {
        MonitorStatusMap.set(active);
    }

    public Object invoke(MethodInvocation mi) throws Throwable {
        Object obj = null;
        if (MonitorStatusMap.get() != null && MonitorStatusMap.get()) {
            PerformanceMonitor.begin(mi.getClass().getName() + "." + mi.getMethod().getName());
            obj = super.invoke(mi);
            PerformanceMonitor.end();
        } else {
            obj = super.invoke(mi);
        }
        return obj;
    }
}
@Component(value = "forumServiceTarget")
public class ForumService{

    public void removeTopic(int topicId) {
        System.out.println("模拟删除Topic记录:" + topicId);
        try {
            Thread.currentThread().sleep(20);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

    public void removeForum(int forumId) {
        System.out.println("模拟删除Forum记录:" + forumId);
        try {
            Thread.currentThread().sleep(40);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

 

 

注:通过第二种方式测试AOP的前置、后置、环绕、异常后置增强均通过

@ContextConfiguration(locations = { "classpath:/aop/introduce/applicationContext.xml" }) 这么写也不行

 

 

 

2013年6月14日 09:45

2个答案 按时间排序 按投票排序

0 0

采纳的答案

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:aop/introduce/applicationContext.xml" })
public class ForumServiceTest{

    @Autowired
    private ApplicationContext ctx;

    @Test
    public void test() {
        ForumService forumService = ctx.getBean("forumService", ForumService.class);
        forumService.removeForum(10);
        forumService.removeTopic(1022);
        Monitorable moniterable = (Monitorable)forumService;
        moniterable.setMonitorActive(true);
        forumService.removeForum(10);
        forumService.removeTopic(1022);
    }
}


你暂时先通过如上代码实现吧  具体原因 和 spring-data-jpa 与shiro集成时的原因类似,,后边我会专门写篇文章介绍 为什么

2013年6月14日 12:18
0 0

代码分析已经搞定,请参考
http://jinnianshilongnian.iteye.com/blog/1894973

2013年6月27日 05:39

相关推荐

    spring 3.2.2官方JAR包

    在3.2.2版本中,Web Flow提供了更好的可测试性,以及对Spring MVC的更紧密集成。 6. **容器增强**: Spring 3.2.2引入了对Java 7的完全支持,包括多线程和并发API的改进。此外,还增强了容器的性能和稳定性,比如...

    最新spring3.2.2Jar包

    6. **spring-test-3.2.2.jar**:测试模块提供了对JUnit和TestNG的支持,使得在Spring应用中进行单元测试和集成测试变得容易。它提供了Mock对象和ApplicationContext的便利工具。 7. **spring-jdbc-3.2.2.jar**:...

    Struts2.3.12+Spring3.2.2+Hibernate4.2.0框架配置

    在本文中,我们将深入探讨如何配置Struts2.3.12、Spring3.2.2和Hibernate4.2.0这三个组件。 1. **Struts2.3.12** Struts2是Apache软件基金会的一个开源MVC框架,用于构建基于Java Servlet的应用程序。它提供了强大...

    spring-3.2.2 libs

    Spring 3.2.2是该框架的一个稳定版本,它修复了之前版本的一些问题,并引入了新的特性和改进。 2. **Spring 3.2.2 Libs主要内容** "spring-3.2.2 libs"这个压缩包包含了Spring框架的所有核心模块及其依赖库,例如...

    spring3.2.2+mybatis3.1-lib

    8. **测试支持**: 在测试层面,Spring的TestContext框架可以很方便地进行集成测试,模拟数据库操作,确保整个Spring-Mybatis整合的系统能够正常工作。 以上就是"spring3.2.2+mybatis3.1-lib"整合的相关知识点,这个...

    spring-framework-3.2.2-dis jar包

    在测试方面,Spring Test模块提供了强大的单元测试和集成测试支持。在3.2.2版本中,你可以使用@RunWith(SpringJUnit4ClassRunner.class)注解启动Spring测试环境,配合@Test和@MockBean等注解进行便捷的测试编写。 ...

    spring-framework-3.2.2.RELEASE 源码

    8. **测试支持**:Spring Test模块提供了方便的单元测试和集成测试工具,如`@RunWith(SpringJUnit4ClassRunner.class)`、`@ContextConfiguration`等,使得测试Spring应用更加便捷。 9. **Spring Expression ...

    最新版本Struts2.3.12+Spring3.2.2+Hibernate4.2.0框架配置详细步骤

    Spring3.2.2是该框架的一个稳定版本,增强了对其他框架的集成支持,包括Struts2。 **2.1 整合Spring3.2.2** - **添加Spring库**:将spring-context、spring-beans、spring-web等核心库添加到项目中。 - **配置...

    spring-framework-3.2.2.RELEASE基本包

    9. **改进的测试支持**:提供了更丰富的测试工具和API,包括对Spring MVC的模拟和模拟测试工具,使得单元测试和集成测试更加便捷。 四、实际应用 在实际开发中,Spring Framework 3.2.2.RELEASE可以用于构建各种...

    最新版本Struts2.3.12+Spring3.2.2+Hibernate4.2.0框架配置详细步骤.docx

    本文档详细介绍了如何配置最新版本的Struts2.3.12、Spring3.2.2和Hibernate4.2.0,以帮助开发者快速搭建SSH整合环境。 1. **导言** - **目的**:本教程旨在为开发者提供一个清晰的步骤,以便在实际项目中快速集成...

    spring 2.5.6和hibernate3.2.2集成(1)

    这篇博客"spring 2.5.6和hibernate3.2.2集成(1)"显然是关于如何将这两个版本的框架整合到一个项目中的教程。下面我们将深入探讨这两个框架及其集成的关键知识点。 1. Spring框架: - 版本2.5.6:这是一个较旧但...

    最新版本Struts2.3.12+Spring3.2.2+Hibernate4.2.0配置xml和详细步骤

    **Spring** 3.2.2版本是一个全面的企业应用框架,支持AOP(面向切面编程)、DI(依赖注入)和声明式事务管理。`applicationContext-config.xml`、`applicationContext-bean.xml`和`applicationContext-action.xml`是...

    spring framework 3.2.2的源码+build.xml

    这使得单元测试和集成测试更加方便。 最后,`build.xml`文件通常用于Ant构建系统,这是一个Java项目自动化构建工具。通过查看`build.xml`,我们可以了解Spring项目是如何编译、打包、测试和部署的。 总的来说,...

    基于最新的SSH(Struts2.3.12+Spring3.2.2+Hibernate4.20)+ jquery EasyUI1.3.2的担保公司OA系统

    Spring3.2.2是该框架的一个稳定版本,提供了依赖注入、事务管理、数据访问集成、MVC、测试等功能。 3. Hibernate:Hibernate是一个强大的ORM框架,允许开发者使用Java对象来操作数据库,减少了SQL的编写工作。...

    spring-framework-3.2.2.RELEASE

    - **持续集成与测试**:Spring Test模块支持Junit和Mockito,方便进行单元测试和集成测试。 7. **性能优化** - **缓存支持**:Spring支持多种缓存机制,如 EhCache 和 Redis,提升应用性能。 - **Asynchronous ...

    spring3.2 源码 jar包

    7. **测试支持**:Spring提供了方便的测试工具,包括Mock对象和测试上下文框架,方便单元测试和集成测试。 现在,你已经拥有了Spring 3.2的源码,可以通过以下步骤在项目中使用: 1. **导入源码**:将下载的source...

    MVC.rar_SpringMVC Struts_java MVC_mvc_spring-aspects-3.2.2_spri

    标题"MVC.rar_SpringMVC_Struts_java_MVC_mvc_...通过分析和运行其中的代码,开发者可以更好地掌握Spring框架的核心功能,包括SpringMVC、Spring AOP以及与Hibernate的集成,同时也能理解MVC模式在实际项目中的运用。

    spring-3.2-lib

    6. **spring-test-3.2.2.RELEASE.jar**:提供了测试支持,帮助开发者进行单元测试和集成测试,可以与其他Spring组件结合使用,提高测试效率。 7. **spring-jdbc-3.2.2.RELEASE.jar**:提供了对JDBC(Java Database ...

    spring-framework-3.2.0.RELEASE-dependencies框架依赖包

    7. **测试支持**:Spring 提供了针对Spring应用的单元测试和集成测试框架,包括模拟对象(Mock Objects)和测试上下文框架。这有助于开发者编写可测试的代码。 8. **国际化支持**:Spring 提供了本地化和消息资源...

    Spring+in+action+中文版(第4版)

    - **4.2.1 单元测试与集成测试**:介绍如何为Spring应用编写单元测试和集成测试。 - **4.2.2 应用的部署策略**:讨论Spring应用的不同部署方案。 以上是对《Spring in Action 中文版(第4版)》这本书的主要知识点...

Global site tag (gtag.js) - Google Analytics