我从两个方面建议了一些方法,一个是使用spring AOP支持,另一个是BeanPostProcessor
(MethodValidationPostProcessor
)建议所有带有@validation
注释的方法。在我的单元测试中,我试图通过破坏方法契约来强制抛出错误,但有时验证是到位的(上面提到的后处理器强加的建议),有时不起作用。有人经历过类似的事情吗。
下面是我正在尝试做的事情的一个小片段:
@Aspect
@Component
public final class LoggingAspect {
@Before(value = "execution(public * * (..)) && @annotation(loggable)",
argNames = "joinPoint, loggable")
public void before(JoinPoint joinPoint, Loggable loggable) {
//logging here...
}
}
注释(可记录代码)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Loggable {...}
使用@Validated注释注释的接口(这里有相关信息的链接)。
@Validated
public interface Dao<T, K> {
T findById(@NotNull K id);
T persist(@NotNull T object);
}
实现此接口的基类:公共抽象类BaseDao实现DAO{@loggable public T persist(T object){...}}
<aop:aspectj-autoproxy/>
<context:annotation-config/>
<context:component-scan base-package="com.my.package"/>
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>
我四处挖掘,发现问题与我把注释放在哪里有关。很抱歉给您带来不便。
出于某种原因,我的Spring AOP建议被调用了两次。我查过了: > Spring AOP通知被调用了两次,但我没有使用组件注释,我只声明了一次方面bean,并用@aspect注释它,仅此而已。 我用@Aspect声明一个类,然后在应用程序上下文中将它声明为bean。XML文件中没有建议或切入点。 第三次编辑: 还值得注意的是,我在执行方法之前和之后都记录了被告知与周围: 通气管
我正在使用SpringAOP创建一个方面。我定义的方面将执行两次。我似乎不明白为什么。我非常感谢任何人对这个问题的意见。 谢谢 //Spring配置 //建议 //建议的方法 //输出 //编辑1:添加了更多的spring配置信息。根本不使用任何Spring AOP注释。我附加了一个调试器,看到aspect/log语句也被执行了两次。所以我怀疑它是否与日志语句打印字符串两次有关。
我是Spring AOP的新手,我想知道是否有可能将中的值返回给方法,并在其中使用这个变量,例如: 而我的方法: 有办法做到这一点吗?否则我必须重复这个问题。谢谢 更新:使用我可能有这个代码,但是如何将变量检索到方法中?
问题内容: 我建立了一个简单的测试,它可以无限循环地创建和删除文件(名称不变)。该测试确实运行了几秒钟(有时超过77,000次迭代!),然后由于以下异常而失败: 这是测试逻辑: 这怎么可能?删除呼叫不会失败。它会说明一切。因此删除总是成功但失败。这就是MSDN关于Win32 API函数的说法: DeleteFile函数在关闭时将文件标记为要删除。因此,在关闭文件的最后一个句柄之前,不会发生文件删除
有一个项目大约有20个控制器。每个控制器都有其相应的测试类。当我们尝试添加新的controller tests类时,以前运行良好的一些测试开始随机失败。如果使用@Ignore注释任何控制器测试类,测试将恢复正常。 这是失败测试抛出的异常: org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.Illega
我是Spring Aop的新手,但我有理由为mongo db调用(monog db更新)实现Aop建议。我尝试了不同的方法,但得到了'point cut not wood formed‘错误或'warning与此类型名称不匹配:arg string[xlint:invalidAbsoluteTypeName]'(即使我给出了参数的绝对名称)。任何人都可以在这方面提供帮助,因为如何为mongo db