mjj*_*409 13 aspectj load-time-weaving tomcat8 spring-boot embedded-tomcat-8
我正在尝试设置@Configurable域对象(不是由spring容器管理).
我已经通过添加-javaagent:path/to/spring-instrument.jar作为JVM参数来完成这项工作但是我不能100%清楚这个-javaagent是否必须到位.我在Tomcat 8上运行它.我可能会误解文档,但似乎我可以使用另一种机制来实现这一点,特别是这一行:
不要定义
TomcatInstrumentableClassLoader了对Tomcat 8.0高.相反,让SpringInstrumentableClassLoader通过TomcatLoadTimeWeaver策略自动使用Tomcat的新本机设施.
代码示例如下:
@SpringBootApplication
@EnableLoadTimeWeaving
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
@Bean
public MyService myService(){
return new MyService();
}
}
Run Code Online (Sandbox Code Playgroud)
@Configurable
public class MyDomainObject {
@Autowired
private MyService myService;
public MyService getMyService(){
return myService;
}
}
Run Code Online (Sandbox Code Playgroud)
public class MyService {
private static final Logger log = LoggerFactory.getLogger(MyService.class);
public void test(){
log.info("test");
}
}
Run Code Online (Sandbox Code Playgroud)
那么有没有办法在不指定-javaagent的情况下编织这些@Configrable对象?我有兴趣学习如何在将WAR作为WAR部署到独立Tomcat 8服务器和/或在作为'胖'jar启动时使用嵌入式Tomcat 8服务器时完成此操作.
因为它部署到Stand Stand Tomcat 8服务器不会抛出错误,但getMyService()上面的方法返回null.启动为胖jar会在启动期间引发以下错误:
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中?似乎没有任何东西像文档中所说的那样自动发生,但我可能会错误地解释这究竟意味着什么.
小智 -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
{}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1197 次 |
| 最近记录: |