这似乎是一个简单的问题,但在搜索文档和论坛时却找不到明确的答案。我正在从xml迁移到基于Java的配置(春季5.1.9)。由于xml config中的一些遗留限制,我需要从某些端库的非公共类创建一个bean:

SampleClass.class

package side.library

class SampleClass {
 //... some code here
}


context.xml

...
<bean id = "sampleId" class "side.library.SampleClass">
...


这很好用,因为Spring在内部使用反射,并且它在编译/运行时没有任何问题地创建Bean,但是在基于Java的配置中使用此类会导致访问错误:

package my.configuration;

import side.library.SampleClass; // 'side.library.SampleClass' is not public in 'side.library'. Cannot be accessed from outside package

@Configuration
public class JavaConfiguration{

 @Bean
 public SampleClass sampleClass() {
  return new SampleClass(); // same error text
 }

}


那么,处理这种缝合的正确方法是什么?在@Configuration类中使用反射库来到达此类似乎不是一个好主意。

最佳答案

只是一种解决方法:在外部项目的同一包中创建一个包装器类,并在您的配置中使用该类。

package com.legacy;
public class Wrapper {

  private LegacyImpl legacyImpl;
  public Wrapper()
   this.legacyImpl = new LegacyImpl();
  }

  public void wrappedMethod() {
    this.legacyImpl.wrappedMethod();
  }
}

07-24 13:14