我喜欢使用 javassist 更改网络应用程序中的第 3 方类。该类在 org.springframework.web.context.ContextLoaderListener
调用 spring web 应用程序上下文初始化时加载。我尝试了自定义 BeanFactoryPostProcessor
但它似乎启动得太晚了:
javassist.CannotCompileException: by java.lang.LinkageError: loader ... 名称的重复类定义:“SomeClass”
我想这可以通过将 ContextLoaderListener
替换为在初始化 bean 之前更改类的自定义类来完成。如果可能的话,我宁愿根本不接触 web.xml。
因此,我的问题是是否有一种方法可以注册一个在任何类 bean 定义加载之前执行的回调。
最佳答案
您可以尝试在您的 BeanFactoryPostProcessor
上实现 PriorityOrdered
以实现类似于在其他 bean 之前调用的 PropertyPlaceholderConfigurer
的效果(以便它可以加载并提供可在 bean 定义中使用的属性。
查看 PropertyPlaceholderConfigurer
以获取可重用的模式。
关于java - 是否可以通过 Hook bean 定义来更改类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18270059/