使用Spring Boot和启用LoadTimeWeaving的嵌入式tomcat,缓存方面在运行时没有任何影响,但我们看到在日志中编织的情况很好。
下面是配置,LoadTimeWeave与模式一起启用,作为用于缓存的AsheJ
@Configuration
@EnableConfigurationProperties
@EnableSpringConfigured
@EnableAspectJAutoProxy(proxyTargetClass = true)
@EnableLoadTimeWeaving
@EnableTransactionManagement
@EnableAsync
@EnableCaching(mode = AdviceMode.ASPECTJ)
public class AppConfig {
}
Spring代理-javaagent:..//Spring-仪表-4.3.3。释放。罐子
原木
[RestartClassLoader@2aaae670] debug weaving 'uk.co.loyalty.iss.newpro.reporting.domain.refdata.gateway.RestReferenceDataGateway'
[RestartClassLoader@2aaae670] weaveinfo Join point 'method-execution(java.util.List uk.co.loyalty.iss.newpro.reporting.domain.refdata.gateway.RestReferenceDataGateway.getHierarchyLevelDefns())' in Type 'uk.co.loyalty.iss.newpro.reporting.domain.refdata.gateway.RestReferenceDataGateway' (RestReferenceDataGateway.java:118) advised by around advice from 'org.springframework.cache.aspectj.AnnotationCacheAspect' (AbstractCacheAspect.aj:64)
[RestartClassLoader@2aaae670] weaveinfo Join point 'method-execution(java.util.Map uk.co.loyalty.iss.newpro.reporting.domain.refdata.gateway.RestReferenceDataGateway.getHierarchyLevelDefinitionMap())' in Type 'uk.co.loyalty.iss.newpro.reporting.domain.refdata.gateway.RestReferenceDataGateway' (RestReferenceDataGateway.java:129) advised by around advice from '**org.springframework.cache.aspectj.AnnotationCacheAspect**' (AbstractCacheAspect.aj:64)
[RestartClassLoader@2aaae670] **debug generating class** 'uk.co.loyalty.iss.newpro.reporting.domain.refdata.gateway.RestReferenceDataGateway$AjcClosure1'
[RestartClassLoader@2aaae670] debug generating class 'uk.co.loyalty.iss.newpro.reporting.domain.refdata.gateway.RestReferenceDataGateway$AjcClosure3'
围绕这个有很多讨论。编织发生在RestartClassLoader上,不确定是否与类加载器有关。我也尝试添加以下内容,
@Bean
public LoadTimeWeaver loadTimeWeaver() throws Throwable {
InstrumentationLoadTimeWeaver loadTimeWeaver = new InstrumentationLoadTimeWeaver();
return loadTimeWeaver;
}
请提供您的建议。
编辑我们需要Aspectj模式,因为我们在私有方法上使用缓存。我删除了EnableAspectJAutoProxy,但仍然没有帮助。
在对加载时编织的进一步分析中,我注意到了以下行为。我分析了应用程序并研究了类加载器,以查看编织是否正确,以便缓存注释正常工作(类是转换的)。我注意到,对于类加载器中的一些类,我们有一个带有后缀的类($AjcCloure,这些是编织完成后转换的类)。因此,如果缓存注释是这些编织类的一部分,那么它就可以正常工作。然后我仔细研究了类,为什么有些类编织正确,有些则不正确。然后我注意到,如果在编织发生之前已经将类加载到类加载器中,那么这就是编织没有发生的地方。
@Bean
public IAService aService(){
return new AServiceImpl();
}
在上述情况下,仅当需要此实例时(在加载时编织和缓存工作正常后),才会将类is AServiceImpl加载到类加载器。但是,如果使用@组件初始化同一个类,那么它就不会被编织。
@Service
public class AServiceImpl{
}
我认为,在上述情况下,类AServiceImpl被加载到类加载器,而spring容器初始化,加载时编织尝试在之后编织)。
我也在类加载器中再次验证了这种行为。那么,如果aspectj尝试编织一个已经加载的类,这是否是一个问题。同样的问题也出现在SpringJira以及下面的链接中。
https://jira.spring.io/browse/SPR-13786
如上面的链接所述,如果我像下面这样将aspectj编织器作为java代理传递,那么所有的类都被正确编织。那么,是需要有两个代理,还是我们有其他选择。
-javaagent:../../../aspectjweaver-1.6.1.jar
-javaagent:../../../spring-instrument-4.3.3.RELEASE.jar
是的,在类加载器加载编织目标之前,编织器需要处于活动状态。
现在,我是一个AsheJ极客,但不是容器极客,我主要使用JavaSE,没有容器。请尝试添加
-javaagent:path/to/aspectjweaver.jar
访问您的命令行,看看是否有帮助。
我有时会在pom中看到以下声明。xml。。。 如您所见,sping-boo-starter-web被声明为tomcat-embed-jasper。 是不是sping-boo-starter-web已经有一个嵌入式tomcat了?为什么一些开发人员仍然声明tomcat-embed-jasper以及boot-starter-web?还是有什么原因?
回顾介绍中, php构建了一个层级系统. 最高层是提供用户空间函数和类库的所有扩 展. 同时, 其下是服务API(SAPI)层, 它扮演了webserver(比如apache, iis以及命令行接口 cli)的接口. 在这许多sapi实现中有一个特殊的sapi就是嵌入式sapi. 当这个sapi实现被构建时, 将 会创建一个包含所有你已知的php和zend api函数以及变量的库对象, 这个库对象
主要涉及到嵌入式软件开发、嵌入式驱动开发、RTOS 开发、IOT 开发等知识点。
问题内容: 我想做这样的事情: 对象ReportingFile可以是LogRequest或LogReport文件。(两者结构相同) 一个对象Reporting,其中包含一个logRequest,其中包含带日期的logReport列表。 我试图设置一个EmbededId,这将是logRequest的属性。这就是我遇到的问题。我没有来管理嵌入式ID。(http://docs.jboss.org/hib
问题内容: 是否可以在不使用嵌入式结构的情况下继承类型的方法? 代码的第一个片段是将结构嵌入其中的工作代码,我可以在上调用该方法。我不喜欢的是,当我初始化时,我有(?)来初始化其中的结构。有没有解决的办法? 最终,我想做以下事情。where 是类型和初始化位置,也不需要初始化结构。以下代码不起作用,但可能清楚我的目标是什么。 我将添加更多使用的方法的结构,这就是我要问的原因。如果只拥有,我将拥有可
问题内容: 我使用Mongoose.js,无法解决3级层次结构文档的问题。 有2种方法可以做到。 首先 -没有裁判。 我需要出示C记录。仅知道_id的C,如何填充/找到它? 我曾尝试使用: 但是我不知道如何从returnet得到一个对象,我只需要c对象。 其次,如果使用裁判: 如何填充所有B,C记录以获取层次结构? 我试图使用这样的东西: 但是它将为single_c.title返回undefine