假设我们有下一节课
@Service
class MyClass {
public void testA() {
testB();
}
@Transactional
public void testB() { ... }
}
现在,如果我们在测试中调用MyClass.testa();
,那么TestB
上的@transactional
将不会生效。我认为原因是跟随。
Cglib将为myclass
创建一个代理bean,如下所示:
Class Cglib$MyClass extends MyClass {
@Override
public void testB() {
// ...do transactional things
super.testB();
}
}
现在我们调用myclass.testa()
,它将调用myclass.testb()
而不是cglib$myclass.testb()
。因此@transactional
无效。(我说的对吗?)
我尝试为这两种方法(即testa()
和testb()
)添加@transactional
。代理类应该如下所示。
Class Cglib$MyClass extends MyClass {
@Override
public void testA() {
// ...do transactional things
super.testA();
}
@Override
public void testB() {
// ...do transactional things
super.testB();
}
}
在这种情况下,虽然我们成功调用了cglib$MyClass.testa()
,但它仍然会转到MyClass.testB()
。
所以我的结论是,同一个类中的两个方法互相调用会使aop注释无法生效,除非我们使用aopContext.currentProxy()
。
我猜对了吗?非常感谢你的建议!
众所周知(请搜索术语“自调用”),由于Spring AOP基于代理的性质,它不会也不能捕获像this.someMethod(..)
这样的内部方法调用。
因此,正如您所说的,您要么需要显式引用公开的代理对象,要么通过加载时编织从Spring AOP切换到完整的AspectJ。
我有一个类,其中有一些静态方法和一些非静态方法,所以当我试图从静态方法访问非静态方法时,我会遇到一个著名的错误。每当我搜索这个论坛,我得到的解决方案,当有两个类,从一个你试图达到另一个。我的问题是,如果它们在同一个类中,如何从静态方法调用非静态方法? 我试着用 但是我的方法包含发送Intent和finish(),所以如果我创建的对象不是finish,就不起作用。
基本上我有: 错误:只有在显式请求批注处理时才接受类名“test” 非常感谢所有的回复:)
问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法
导入java.rmi.RemoteException;导入java.util.properties;导入javax.ejb.createException;导入javax.naming.context;导入javax.naming.InitialContext;导入javax.naming.namingException;导入com.brainysoftware.ejb.adder;导入com.b
我正在使用Glassfish 4。我有一个耳朵,它有一个战争和一个罐子(与EJB)。 我想从WAR中调用EJB,但不确定是否需要使用本地或远程接口。 在我的罐子里,我的豆子是这样的: 在我的WAR中,我有一个web服务,它看起来如下所示: 这两个都包装成一个耳朵。 当我调用WebService方法时,我得到一个AccessLocalException: 首先: 这是调用EJB的正确方法吗。EAR中
问题内容: 我是python的新手。我试图在类中将值从一种方法传递给另一种方法。我搜索了该问题,但无法获得适当的解决方案。因为在我的代码中,“ if”正在调用类的方法“ on_any_event”,而该方法反过来应该调用我的另一个方法“ dropbox_fn”,该方法利用了“ on_any_event”中的值。如果“dropbox_fn”方法在类之外,它将起作用吗? 我将用代码说明。 这里的主要问