问题标签 [spring-aop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
19629 浏览

java - 获取 Spring bean 的真实 Class 对象

我正在使用 Spring 注入 bean。我正在使用一些注释来注释 bean 方法(Security、TransactionManagement、ExceptionHanling、Logging)。问题是:

我想创建 JUnit 测试来检查我是否忘记注释某些方法。但是 Spring 返回 $ProxyXXX 类,没有任何方法注释..

如何获取方法的注释或获取真实的类对象?

PS Spring 2.5.6,JDKDynamicProxy(不是 CGLib)

0 投票
2 回答
32398 浏览

java - Spring AOP AfterThrowing vs. Around Advice

当试图实现一个负责捕获和记录某种类型的错误的方面时,我最初认为这可以使用 AfterThrowing 建议。然而,他的建议似乎没有捕捉到异常,而只是提供了一个额外的入口点来处理异常。

唯一能捕获有问题的异常的建议将是一个 AroundAdvice——要么是那个,要么是我做错了什么。

任何人都可以断言,如果我想捕捉异常,我必须使用 AroundAdvice 吗?我使用的配置如下:

请注意,在此示例中,我捕获了所有异常,因为它只是一个示例。我知道吞下所有异常是不好的做法,但是对于我当前的用例,我希望只记录一种特殊类型的异常,同时避免重复的日志记录逻辑。

0 投票
5 回答
15066 浏览

java - Spring AOP:如何获取建议方法的注释

我想用 Spring/AOP 和注释来实现声明式安全性。正如您在下一个代码示例中看到的那样,我有带有参数“allowedRoles”的受限注释,用于定义允许执行建议方法的人员。

现在,问题是在我的建议中我无法访问定义的注释:

上面的方法总是返回 null (根本没有找到注释)。有一个简单的解决方案吗?

我读过一些关于使用 AspectJ 代理的文章,但我不想使用这个代理。

0 投票
3 回答
8489 浏览

java - 仅使用注释的 Spring AOP 拦截方法

在我的 Spring 上下文文件中,我有这样的内容:

abcUserExistsCheck 如下所示:

被这些东西拦截的类看起来像这样:

这行得通。在将调用传递给 Klazz 之前,根据需要执行 UserExistCheck。问题是这是我让它工作的唯一方法。通过使用注释而不是上下文文件来完成这项工作似乎对我的小脑袋来说太过分了。那么......我究竟应该如何注释 UserExistsCheck 和 Klazz 中的方法?我还需要别的东西吗?另一个班级?上下文文件中还有内容吗?

0 投票
3 回答
4873 浏览

java - Spring @Transactional 方法 - 参与事务

在一个 dao 中,我有 2 个 @Transactional 方法。

如果我不提供任何明确的属性,

那么会发生什么,如果

我在另一种方法的主体中运行一种方法?

两种方法都将在同一事务中运行?

0 投票
1 回答
1982 浏览

aop - 带有 Spring AOP 的 Apache CXF REST 服务

我正在尝试让 Apache CXF JAX-RS 服务与 Spring AOP 一起使用。我创建了一个简单的日志记录类:

我的 Spring 配置(beans.xml):

当调用方法 getServletRequest() 时,我总是在 RestService 中得到 NPE,该方法具有:

如果我从 beans.xml 中删除 aop 配置或将其注释掉,一切正常。

我所有的实际 Rest 服务都扩展了 test.rest.RestService(这是一个类)并调用 getServletRequest()。我只是想根据 CXF JAX-RS 文档中的示例启动并运行 AOP。我究竟做错了什么?

0 投票
2 回答
6504 浏览

java - Spring aop切入点表达式访问方法返回类型

我有一个包含许多方法的服务接口,所有这些方法都接受一个 Request 对象并返回一个 Response 对象。所有请求对象都有一个共同的祖先,所有响应对象都有一个不同的共同祖先(它有一个成功标志和一个消息字段)。

现在我想要一个检查权限等的周围方面,执行服务调用并在任何失败时返回一个带有失败代码的 Response 对象。问题是:我需要知道要创建什么类型的 Response 对象。是否有一个切入点表达式可以让我访问返回类型?大概是这样的吧?

0 投票
1 回答
891 浏览

java - 如何用 Spring 实现 AOP

我正在使用 Spring,我需要实现 AOP,但我对它完全陌生。有谁能够帮助我?

0 投票
1 回答
578 浏览

java - 我正在尝试使用 aop 切入点的东西进行交易,但是 gettig 错误我也在使用休眠

我正在尝试使用 aop 切入点的东西进行交易,但 gettig 错误我也在使用休眠。我正在关注这个:http ://static.springsource.org/spring/docs/2.5.x/reference/transaction.html

在此之前我使用的是hibernate+spring sessionFactory等等。

错误 :

0 投票
1 回答
357 浏览

java - 尽管我也添加了 aspectjrt.jar,但使用 spring aop 切入点出现错误

无法解决此问题错误:

java.lang.IllegalStateException:ContainerBase.addChild:开始:org.apache.catalina.LifecycleException:javax.xml.parsers.FactoryConfigurationError:在org.apache.catalina.core.ContainerBase中找不到提供程序org.apache.xerces.jaxp.SAXParserFactoryImpl .addChildInternal(ContainerBase.java:932) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:912) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:694) 在 com。 sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1933) 在 com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1605) 在 com.sun.enterprise.web.WebApplication.start(WebApplication. java:90) 在 org.glassfish.internal.data.EngineRef.start(EngineRef.java:126) 在 org.glassfish.internal.data。ModuleInfo.start(ModuleInfo.java:241) at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:236) at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:339)在 com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:183) 在 org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:272) 在 com.sun.enterprise.v3.admin .CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl. java:1176) 在 com.sun.enterprise.v3.admin.CommandRunnerImpl.access $900(CommandRunnerImpl.java:83) 在 com.sun.enterprise.v3.admin。CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224) at com.sun.enterprise.v3.admin.AdminAdapter.doCommand( AdminAdapter.java:365) 在 com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:204) 在 com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166) 在 com .sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:100) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:245) 在 com.sun.grizzly.http .ProcessorTask.invokeAdapter(ProcessorTask.java:791) 在 com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) 在 com.sun.grizzly.http.ProcessorTask。在 com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) 在 com.sun.grizzly 的 com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) 的进程(ProcessorTask.java:954) .DefaultProtocolChain.execute(DefaultProtocolChain.java:102) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 在 com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) 在 com. sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) at com.sun.grizzly.ContextTask.run(ContextTask.java:69) at com .sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) 在 com。sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) 在 java.lang.Thread.run(Thread.java:619)