Spring AOP启动时间慢
我们使用@AspectJ样式注释和 的Spring(3.0.5)AOP.我们将其用于交易,审计,分析等.它运行良好,除了应用程序的启动时间随着添加更多的代码而不断增长. . 我已经进行了一些分析,发现大多数时间都是在弹簧容器初始化期间花费的,更具体地说org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(String, ObjectFactory) - 大约需要35秒. org.springframework.aop.support.AopUtils.canApply(Pointcut, Class, boolean) - 大约需要15秒 我的目标是使申请在5-10秒内开始,而不是现在〜45秒开始,因此任何提示都将不胜感激. 解决方案 我遇到了同样的问题,事实证明,Spring aop apo-proxyi
0 2023-05-23
编程技术问答社区
使用aop的性能影响
我们已经开始使用Spring AOP进行应用程序的交叉切割方面(目前安全与缓存). 我的经理担心这项技术的性能影响,尽管他完全了解了好处. 我的问题,您是否遇到了使用AOP引入的性能问题(特别是Spring AOP)? 解决方案 只要您具有对AOP的控制,我认为这是有效的.无论如何,我们确实存在性能问题,因此通过自己的推理,我们并没有完全控制;)这主要是因为重要的是,任何撰写方面的人都对所有其他其他其他进行理解很重要. >系统中的各个方面以及它们如何相互关联.如果您开始做"聪明"的事情,则可以在吉菲中脱颖而出.在一个大型项目中做聪明的事情,许多人只看到系统的小部分可能是非常危险的性能.此建议可能也不适用,但是AOP可以让您以一些真正优雅的方式向脚开枪. Spring还使用代理进行示波器手术和 很容易获得不希望的性能损失. 但是,鉴于您有控制权,AOP的唯一真正的疼痛点是对调试的影响. 其他解决方案 如果表现会令人担忧,我们已经使用 axpectj
2 2023-05-23
编程技术问答社区
在Aspect中的Spring @Transactional(AOP)。
我创建了一个包含 @transactional注释的方面.我的建议是按预期调用的,但是新的实体审计永远不会保存到数据库中,看来我的 @transactional注释不起作用. @Aspect @Order(100) public class ServiceAuditTrail { private AppService appService; private FooRecordRepository fooRecordRepository; @AfterReturning("execution(* *.app.services.*.*(..))") public void logAuditTrail(JoinPoint jp){ Object[] signatureArgs = jp.getArgs(); String methodName = jp.getSignature().getName(); List args = new Ar
18 2023-05-16
编程技术问答社区
如何在使用maven构建的spring boot 2 java应用程序中使用groovy解释(带有spring-aop注解)?
我有一个Spring Boot 2 Java应用程序,并希望使用解释的(未编译)Groovy代码向AOP注入AOP.通过阅读春季文档,这听起来像是可能的,但是我找不到任何示例. aop-建议脚本豆: 当然,您不仅限于为脚本豆提供建议……您还可以用支持的动态语言来写自己的方面,并使用此类豆类来建议其他春季豆.不过,这确实是动态语言支持的高级使用. 最后,我想拥有一个目录,我可以在该应用程序中添加Groovy脚本(用于商业逻辑),以通过Spring-aop向他们注入它们. 我不确定在这种情况下,Spring Boot 2自动执行的操作是什么,或者我必须基于org.springframework.scripting Manally? 集成代码? 所以这是我的小测试项目: project |-pom.xml |src/main/java/de/test |-Commandline.java |-MytestApplication.java |-TestConfig
12 2023-05-15
编程技术问答社区
AspectJExpressionPointcut使用了错误的classLoader
我有一个Java EE应用程序,该应用程序由在Apache Felix容器中运行的多个OSGI捆绑包组成.这些捆绑包之一负责加载弹簧应用程序上下文. 我在应用程序中使用Spring AOP,并且在我的捆绑包中出现以下错误: java.lang.IllegalArgumentException: warning no match for this type name: com.somepackage.SomeClass [Xlint:invalidAbsoluteTypeName] at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:301) at org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.j
2 2023-05-14
编程技术问答社区
在OSGi捆绑中使用Spring AOP
我试图将Spring AOP用于记录目的.我已经设置了记录捆绑包,并在其中设置了OSGi服务. 我有其他OSGi捆绑包,该捆绑包使用记录捆绑包作为OSGi参考的服务. 将记录束部署到Apache Karaf中并运行.我无法部署其他捆绑包. 我的捆绑包中的弹簧配置就是这样:
0 2023-05-14
编程技术问答社区
自定义Spring AOP 围绕+@Transactional
我有一个自定义实施以匹配自定义注释.我希望周围的自定义在外部@transactional中执行.不幸的是,这似乎不起作用. (AOP正在工作.我看到显示的stackTraces). 堆栈跟踪显示我的AOP在(记录器)之前执行,Mybatis会话开始交易,Mybatis关闭交易,弹簧关闭交易,然后我的AOP完成. 我认为订购的AOP实施会有所帮助.我将返回的值设置为1.我使用了.这无效.我认为这是因为我误解了春季订单. 建议订购 当多个建议都想在 同样的联接点?春季AOP遵循与 确定执行咨询的顺序.最高 优先咨询首先运行在"途中"(因此给定两部分 在建议之前,先优先的人首先运行). "在 出路"从联接点开始,最高优先咨询是最后的 (因此,给出了两个后建议,一张最高 优先级将运行第二). 当两个方面定义的两个建议都需要 在相同的联接点上运行,除非您另外指定的顺序 执行不确定.您可以通过 指定优先级.这是在正常的春季方式中完成的 实现org.springframe
28 2023-04-07
编程技术问答社区
如何将业务逻辑和电子邮件发送功能分离?
我在Java Web应用程序中有一个要求,在某些情况下,我需要在其中发送电子邮件警报.为此,我使用了Javax Mail API,并且发送电子邮件的工作正常.但是问题是程序执行等待,直到执行发送电子邮件的方法为止.由于有数百封电子邮件要在各个点发送...这大大降低了性能. 我正在使用弹簧,还使用了弹簧AOP.谁能建议我如何将我的业务逻辑分开并发送电子邮件功能.应该像 - 发送电子邮件是我的建议,当XYZ方法被调用时将执行 - 因此,主执行不应等待建议完成其执行,而应该返回并执行进一步的业务逻辑,从而单独发送电子邮件. . 在这里创建新线程似乎是明显的选择.但是我认为可能有更好的方法,在吗?谢谢. 解决方案 您描述的是异步执行,而执行异步的自然方法是使用线程. 您可以介绍一些Executor,例如Executors.newFixedThreadPool(),并使用它将邮件任务卸载到单独的线程中. 方面本身是一个不合适的地方,因为这会将状态引入方面,例
2 2023-04-06
编程技术问答社区
Spring 3 MVC @Controller with AOP interceptors?
有人知道为什么显然不可能将AOP与注释的MVC控制器一起使用? (请参阅 post ). 我有一个@controller,一旦我添加点数就停止工作. 问题不是不是说拦截器没有被调用,而是@controller只是停止工作(在日志中,您可以看到而不是"映射url路径[/xx]到处理程序'yyy'",您会得到"没有url url确定的路径"). 我知道有一种机制可以通过处理器添加拦截器为控制器,但我的问题是AOP拦截器的特定机制.注释的控制器不是像其他任何Pojo一样在春季容器中的Pojos吗?有什么不同?为什么? @Controller @RequestMapping("/user") public class RestTestImpl implements RestTest { @RequestMapping(value="/", method={RequestMethod.GET}) public @ResponseBody String deleteUse
8 2023-03-31
编程技术问答社区
Spring:无法将模拟注入到用@Aspect注解的类中。
我使用factexj创建了一个建议: package test.accesscontrol.permissionchecker; import test.accesscontrol.database.SessionExpiredException; import test.database.UsersDatabaseAccessProvider; import test.common.constants.GlobalConstants; import test.common.model.AbstractRequest; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.beans.factory.annotation.Autowired;
0 2023-03-29
编程技术问答社区
用于AspectJ的JUnit测试
我正在尝试为自定义方面编写JUNIT测试.这是方面类摘要: @Aspect @Component public class SampleAspect { private static Logger log = LoggerFactory.getLogger(SampleAspect.class); @Around("execution(* org.springframework.data.mongodb.core.MongoOperations.*(..)) || execution(* org.springframework.web.client.RestOperations.*(..))") public Object intercept(final ProceedingJoinPoint point) throws Throwable { logger.info("invoked Cutom aspect"); r
0 2023-03-29
编程技术问答社区
如何在Java配置类中设置Spring Weaver选项?
我正在使用Spring AOP,其中提供了默认DefaultContextLoadTimeWeaver.我希望能够编织持久的实体,我知道我必须设置一个编织选项(从控制台警告): warning javax.* types are not being woven because the weaver option '-Xset:weaveJavaxPackages=true' has not been specified 我的搜索仅在.xml文件中找到了配置的示例,但是我真的希望这是我所有配置所在的Java配置类中. 有办法做到吗? 解决方案 如果您仔细阅读警告,您将了解到这仅是关于Javax的.*可能不想编织的类型.如果是这样,您可以安全地忽略警告. 如果您的方面有任何问题,请显示一些代码并说明什么不起作用.理想情况下,提供 sscce ,否则没有人能帮助您.
4 2023-03-28
编程技术问答社区
用@Component注解的非管理型Bean进行自动布线
我想使用@Autowired将配置@Component配置的非管理BEAN注入托管bean.我很确定我的配置正确,但是由于某种原因,我一直在得到例外: No unique bean of type [foo.Baz] is defined: Unsatisfied dependency of type [class foo.Baz]: expected at least 1 matching bean 根据错误,我猜它找不到BAZ类,但我不确定为什么.我的理解是,XML配置中应该让我这样做的上下文:弹簧配置元素.我还确保包含适当的jar文件(spring-weaving.jar和expackjweaver.jar). 这是我设置的简单示例. 我的XML配置: ...
28 2023-03-23
编程技术问答社区
有0个或更多任何类型参数的Spring AOP指向性表达方法,抛出java.lang.NullPointerException。
我正在遵循一个教程,我正在尝试使用一个接受任何类型的参数或多个参数的弹簧AOP尖端表达方法,但是我得到了Java.lang.nullpointerexception. 我正在使用春季MVC和Maven以及Eclipse. 如果我使用的话,一切正常: @Before("execution(* add*())") 或 @Before("execution(* add*(*))") 或 @Before("execution(* add*(boolean,..))") 但是我使用" .."的那一刻 @Before("execution(* add*(..))") 意味着我希望尖端表达式与任何类型的0或多个参数的方法匹配时,当我尝试使用以下URL访问视图时: http://localhost:8080/springaopdemo/main/test 我获得HTTP状态500-内部服务器错误 在我的日食控制台日志中,我会收到以下错误: 预先感谢您的帮助
0 2023-03-23
编程技术问答社区
编写Spring AOP程序时对maven的依赖性?
我正在尝试使用Spring 5学习Spring AOP编程. 我正在使用春季. 我发现AOP是一个概念,类似于OOP.使用AOP,OOPS变得更加强大. 现在,我正在尝试使用Spring Framework的AOP进行一些动手编码,版本5.我将使用Maven作为构建工具. 我尚不清楚我们在pom.xml中必须使用的各种依赖项是什么,例如,我们需要使用:spring-aop,spring-aspects,spring-aspects,aspectj等. 我们必须在pom.xml中添加的各种Maven依赖项,才能使用Maven工具,Spring 5 AOP程序写作? ? 解决方案 它非常简单,为了与AOP一起工作,您需要在应用程序的类Path(版本1.6.8或更高版本)上存在fackweaver库.使用此依赖项来实现该 org.aspectj
52 2023-03-23
编程技术问答社区
加载Spring ApplicationContext失败
我正在为春季应用程序编写单元测试,该应用程序很复杂.我想加载弹簧上下文,以便使用定义的豆.我的Contect.xml位于: src/main/resources/context.xml maven构建后,context.xml出现在: target/classes/context.xml 在pom.xml中,我有:(如 a>) true src/test/resources **/*.properties **/*local.properties
0 2023-03-23
编程技术问答社区
为什么AspectJ对Spring'的@Configurable的编译时编织不成功?
更新5:我已经根据最新的日食下载了最新的Spring ToolsSuite IDE.当我将项目作为Maven项目导入时,Eclipse/STS似乎使用Maven目标来构建我的项目.这意味着feackj终于在日食中正常工作. 更新4:我最终只是使用maven + expackj插件来编译时间编织,有效地绕过了eclipse的机制. 更新3:看来,EctectJ的Eclipse插件打破了Eclipse正确发布到Tomcat的能力.只有删除项目上的Axchipj功能,我才能使其再次正确发布.非常烦人. 更新2:我现在在Eclipse中工作了.这么说这让我感到非常不舒服,但是我不知道我是如何从Eclipse或Maven构建中工作的.这似乎是一个编译问题,而不是运行时问题. 更新1:看来我已经通过Maven构建来工作,但是我不知道如何工作. Eclipse仍然行不通.我在 pom.xml 中更改的唯一一件事是添加这些(无关紧要的?)配置参数: 1.6
2 2023-03-22
编程技术问答社区
当请求输入无效时,围绕控制器的Spring AOP无法工作
我使用@Around写了一个请求/响应记录器: @Around(value = "execution(* com.xyz.example.controller.*.*(..))") public Object logControllers(ProceedingJoinPoint joinPoint) throws Throwable { Object response = joinPoint.proceed(); // Log request and response return response; } 但是,我意识到是否提供了请求输入(即提供的请求正文),例如,如果number是请求主体中所需的字段,并且必须是Integer,但是我输入了一个String作为其值并发送到端点,Spring将返回400响应而不会达到这一方面.但是,如果我输入了一些合法的输入,请让请求实际上通过端点,那么此方面将完成其工作.因此,有什么办法让这方面在我上面提到的情况下
16 2023-03-13
编程技术问答社区