小编Ral*_*lph的帖子

ContextLoaderListener与否?

标准的Spring Web应用程序(由Roo或"Spring MVC Project"模板创建)使用ContextLoaderListener和创建一个web.xml DispatcherServlet.为什么他们不仅使用DispatcherServlet并使其加载完整的配置?

我知道ContextLoaderListener应该用于加载非Web相关的东西,而DispatcherServlet用于加载与Web相关的东西(Controllers,...).这导致两个上下文:父上下文.

背景:

几年来我一直以这种标准方式做这件事.

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Handles Spring requests -->
<servlet>
    <servlet-name>roo</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/spring/webmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)

这通常会导致两个上下文及其之间的依赖关系出现问题.在过去,我始终能够找到解决方案,我强烈认为这使得软件结构/架构总是更好.但现在我面临着两种情境事件的问题.

- 然而这让我重新思考这两个上下文模式,我问自己:为什么我要把自己带入这个麻烦,为什么不用一个加载所有弹簧配置文件DispatcherServletContextLoaderListener完全删除.(我仍然会有不同的配置文件,但只有一个上下文.)

有没有理由不删除ContextLoaderListener

java spring servlets dependency-injection

122
推荐指数
3
解决办法
5万
查看次数

WebDriver:检查元素是否存在?

如何检查Web驱动程序是否存在元素?

真正使用try catch是唯一可行的方法吗?

boolean present;
try {
   driver.findElement(By.id("logoutLink"));
   present = true;
} catch (NoSuchElementException e) {
   present = false;
}
Run Code Online (Sandbox Code Playgroud)

java testing webdriver selenium-webdriver

121
推荐指数
5
解决办法
31万
查看次数

如何使用Selenium WebDriver获取HTTP响应代码

我已经使用Selenium2/WebDriver编写了测试,并希望测试HTTP请求是否返回HTTP 403 Forbidden.

是否可以使用Selenium WebDriver获取HTTP响应状态代码?

java selenium webdriver httpresponse httprequest

102
推荐指数
7
解决办法
13万
查看次数

如何立即重新运行失败的JUnit测试?

有没有办法让JUnit规则或类似的东西给每个失败的测试提供第二次机会,只需尝试再次运行它.

背景:我有一大堆用JUnit编写的Selenium2-WebDriver测试.由于非常激进的时间(点击后只有很短的等待时间),一些测试(100个中的1个,总是不同的测试)可能会失败,因为服务器有时响应速度稍慢.但我不能让等待时间太久以至于它肯定足够长,因为那时测试将永远持续下去.) - 所以我认为这个用例即使需要一秒钟,测试也是绿色的是可以接受的尝试.

当然,最好有3个中的2个(重复3次失败的测试,如果其中两个测试是正确的,则将它们视为正确),但这将是未来的改进.

java testing junit

76
推荐指数
5
解决办法
3万
查看次数

java.util.Date克隆或复制以不公开内部引用

最佳做法是不公开Object(Entity)的内部引用.因此,如果一个Object有一个类型的字段,java.util.Date那么例如该字段的getter应该不返回原始日期而是它的副本.

但是对于java.util.Date,有两种常见的方法来创建该副本:

  • 克隆: (Date) originalDate.clone()
  • 通过构造函数复制 new Date(originalDate.getTime())

我的问题是,哪种方式更好,为什么?

java clone

64
推荐指数
3
解决办法
4万
查看次数

摆脱POM未找到org.eclipse.m2e的警告:生命周期映射

为了使m2e 1.0正常工作,我必须指定生命周期映射:

    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.bsc.maven</groupId>
                                    <artifactId>maven-processor-plugin</artifactId>
                                    <versionRange>[2.0.2,)</versionRange>
                                    <goals>
                                        <goal>process</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <execute />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>                         
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
Run Code Online (Sandbox Code Playgroud)

但后来我收到了这个警告:

 [WARNING] The POM for org.eclipse.m2e:lifecycle-mapping:jar:1.0.0 is missing, no dependency information available
 [WARNING] Failed to retrieve plugin descriptor for org.eclipse.m2e:lifecycle-mapping:1.0.0: Plugin org.eclipse.m2e:lifecycle-mapping:1.0.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.eclipse.m2e:lifecycle-mapping:jar:1.0.0
Run Code Online (Sandbox Code Playgroud)

如果我运行一些特定的maven任务例如mvn clean install findbugs:findbugs(如果我只运行mvn clean install那么没有这样的消息)

我知道问题是这个POM不存在,因为它只被定义为保存映射信息.( …

java eclipse m2eclipse maven m2e

56
推荐指数
4
解决办法
4万
查看次数

AspectJ有什么用?

首先让我注意一下,我使用AspectJ,我喜欢它,但我还能做些什么呢.

我知道AspectJ可以用于日志记录.在某些情况下,它用于事务控制 - 主要与注释一起实现.AspectJ也可以用于增强类(代码生成)方法,就像Spring Roo一样.

但我相信AspectJ和AOP一般可以用于:日志记录,事务控制和模拟部分类.

那么AspectJ和AOP的其他有用用例是什么?

java aop aspectj aspects

41
推荐指数
3
解决办法
2万
查看次数

如何防止eclipse在Tomcat上部署测试类?

我有一个Maven项目,包含典型的文件夹src/main/java,src/test/java我正在使用带有m2e 1.0的Eclipse 3.7和用于WTP 1.4.0的Maven Integration.在开发期间使用Eclipse在服务器(Tomcat或Glassfish)上部署应用程序,但它也从src/test/java文件夹部署测试类.

我不希望部署测试类,那么如何从eclipse-tomcat部署中"排除"该目录?

java eclipse tomcat glassfish maven

34
推荐指数
2
解决办法
1万
查看次数

DecimalFormat.format(double)在不同的线程中

我必须在许多线程中并行打印许多格式化的十进制值.要格式化十进制值,我使用java.text.DecimalFormat由模式配置.我知道来自java doc的警告DecimalFormat:

十进制格式通常不同步.建议为每个线程创建单独的格式实例.如果多个线程同时访问格式,则必须在外部进行同步.

但我不知道这个警告是否适用于我的场景:我java.text.DecimalFormat在应用程序启动时配置一次(并将其存储Formatter在最终字段中).之后我只使用这个format(double)方法.

我想这样做的原因是:DecimalFormat每次我需要打印格式化的数字时,我不想通过创建新实例来失去性能.

我查看了DecimalFormat.format(double)代码,它看起来是线程安全的,但我不确定.

DecimalFormat.format(double)在没有改变格式化程序的配置时,你能否确认最终的线程是否安全,或解释为什么不是?

java multithreading thread-safety

29
推荐指数
3
解决办法
2万
查看次数

在@After方法中检测Junit测试的失败或错误

JUnit中是否有一种方法可以在@After注释方法中检测测试用例中是否存在测试失败或错误?

一个丑陋的解决方案是这样的:

boolean withoutFailure = false;

@Test
void test() {
  ...
  asserts...
  withoutFailure = true;
}

@After
public void tearDown() {
   if(!withoutFailuere) {
      this.dontReuseTestenvironmentForNextTest();
   }
}
Run Code Online (Sandbox Code Playgroud)

这很难看,因为需要在测试代码中处理"基础设施"(withoutFailure标志).

我希望有一些东西可以在@After方法中获得测试状态!?

java junit

29
推荐指数
2
解决办法
2万
查看次数