12

我試圖設置一個@Configurable域對象(不是由spring容器管理)。
我已經得到了這個工作,將-javaagent:path/to/spring-instrument.jar作爲JVM參數加入,但它並不是100%清楚這個-javaagent是否必須到位。我在Tomcat 8.我可能誤解了documentation運行這一點,但似乎我可能可以使用另一種機制來做到這一點,尤其是這行:Tomcat 8,Spring Boot,@Configurable LoadTimeWeaving without -javaagent?

不要Tomcat 8.0定義TomcatInstrumentableClassLoader了和更高。相反,讓Spring通過TomcatLoadTimeWeaver戰略自動使用Tomcat的新本地InstrumentableClassLoader工具。

程式碼例子:

​​3210
@Configurable 
public class MyDomainObject { 

    @Autowired 
    private MyService myService; 

    public MyService getMyService(){ 
     return myService; 
    } 
} 

public class MyService { 
    private static final Logger log = LoggerFactory.getLogger(MyService.class); 

    public void test(){ 
     log.info("test"); 
    } 
} 

那麼,有沒有辦法讓不指定-javaagent編織這些@Configrable對象?如果在將WAR部署爲Standalone Tomcat 8服務器和/或使用嵌入式Tomcat 8服務器作爲「胖」jar啓動時能夠完成此任務,我會對此感興趣。

因爲它站在部署到獨立的Tomcat 8服務器不會引發錯誤,但上面的getMyService()方法返回null。啓動作爲脂肪罐子啓動過程中引發以下錯誤:

Caused by: java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar

我想真正的問題是我怎麼Specify a custom LoadTimeWeaver在Tomcat中8?文檔狀態似乎沒有任何事情會自動發生,但我可能會誤解正確的含義。

+1

我現在有同樣的問題,你解決了嗎? – alexanoid

+0

@alexanoid不幸的是我沒有 – mjj1409

回答

-2

如何創建自己的註釋@MyConfigurable?所以當你調用方法時你可以做任何你喜歡的事情。

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Target(ElementType.CONSTRUCTOR) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface MyConfigurable 
{}