在Spring中将一个方面配置为:
@Configuration
@EnableAspectJAutoProxy
@EnableTransactionManagement
public class TestConfiguration {
@Bean
public TransactionAspect transactionAspect(){
return new TransactionAspect();
}
交易观察
是:
@Aspect
class TransactionAspect extends TransactionSynchronizationAdapter
{
private final Logger logger = LoggerFactory.getLogger(TransactionAspect.class);
@Before("@annotation(org.springframework.transaction.annotation.Transactional)")
public void registerTransactionSyncrhonization()
{
TransactionSynchronizationManager.registerSynchronization(this);
}
@Override
public void afterCommit()
{
logger.info("After commit!");
}
}
如果我使用@Transactional
注释实现方法,TransactionAspect
正在按预期工作。但是如果注释在接口上,它就不起作用。这是正常行为还是我做错了什么?
要使这项工作,您需要在基于java的配置中添加代理目标类=真
,例如@EnableAspectJAutoProxy(代理目标类=true)
或
方法上的注释不会被Java中的子类或实现类继承。这可以解释为什么它不起作用。您的期望可能是实现方法从其接口继承注释,但事实并非如此。
更新:由于我之前已经多次回答了这个问题,所以我刚刚记录了这个问题,以及使用AspectJ模拟接口和方法的注释继承中的解决方法。
问题内容: 我正在使用Spring框架(2.5)及其AOP功能。我有一个切入点表达,例如 凡ItemReader接口是一个Spring接口,它的签名是: 该接口有一个名为“ read”的方法,我要对其应用此建议:方法签名为: 但是,当我使用上述切入点表达式运行应用程序时,出现以下异常: java.lang.IllegalArgumentException:警告与此类型名称不匹配:org.sprin
下面是我的代码片段: 服务我mpl.java 现在,我想要的是每当从方法worker(请求,字符串id)抛出null点异常时,我想要执行一些特定的任务,如上图所示。为此,我编写了一个方面类,如下所示: 我的方面。Java语言 电流输出: 期望输出: 如您所见,没有被触发,因此没有打印值。这是什么原因? 注: > 还尝试更改方法的名称,以消除任何也不起作用的重载问题。 到目前为止,尝试了各种其他切入
问题内容: 我有一个在Java 6 / Spring 3中实现的服务类,该服务类需要注释以按角色限制访问。 我定义了一个名为RequiredPermission的注释,该注释具有一个名为OperationType的枚举中的一个或多个值作为其value属性: 我还具有以下方面定义: 参数对象包含一个用户名,在允许访问该方法之前,我想为用户查找所需的角色。 当我将注释放在MyServiceImpl中的
我想拦截所有java。sql。数据源。getConnection方法使用aspectj时,我使用了以下切入点: 它工作得很好。但我遇到了一些类,例如org。阿帕奇。公猫jdbc。水塘在该切入点不起作用的类层次结构中实现的数据源,其中数据源方法位于不实现数据源的层次结构中的类中,只有最顶层的类实现数据源: BaseDataSource不实现DataSource,但具有所有DataSource方法实现
我试图拦截一个用JAX-RS@POST标注的接口方法。我的切入点适用于所有非接口方法,如果@POST-注释直接位于被调用的方法。 拦截的接口方法: 要匹配方法的PointCut: 接口在v1com.myapp.social.webapi.包中,即使我将方法更改为公共AeyJ也不会拦截调用。 在我的切入点内有什么需要改变的吗?我怎样才能让它工作?
RESTEasy代码的一部分。 这是因为“Spring AOP不能通知实现模板接口的pointcut类”吗?有什么想法吗?Spring AOP如何为实现参数化接口的类创建代理对象?...它使用CGLIB还是JDK代理?