[java] @ الفول المنجمي هو فارغ عند الإشارة إليه في المنشئ لحبة أخرى


Answers

للحصول على تبعيات يتم حقنها في وقت الإنشاء ، يجب أن يكون لديك مُنشئ مميَّز مع @Autowired @ مثل ذلك.

@Autowired
public DocumentManager(IApplicationProperties applicationProperties) {
  this.applicationProperties = applicationProperties;
  startOOServer();
}
Question

يظهر أدناه مقتطف شفرة حيث أحاول الإشارة إلى حبة التطبيق الخاص بي. عندما أقوم بالإشارة إليه من المُنشئ ، فإنه لا شيء ، لكن عند الإشارة إليه من طريقة أخرى فلا بأس. حتى الآن لم يكن لدي أي مشكلة في استخدام هذا الفول في الطواقم الأخرى. ولكن هذه هي المرة الأولى التي حاولت استخدامها في منشئ فئة أخرى.

في جزء التعليمات البرمجية أدناه applicationProperties خالية عند استدعاء من المُنشئ ولكن عند الإشارة إليه في أسلوب التحويل غير ذلك. ماذا ينقصني

@Component
public class DocumentManager implements IDocumentManager {

  private Log logger = LogFactory.getLog(this.getClass());
  private OfficeManager officeManager = null;
  private ConverterService converterService = null;

  @Autowired
  private IApplicationProperties applicationProperties;


  // If I try and use the Autowired applicationProperties bean in the constructor
  // it is null ?

  public DocumentManager() {
  startOOServer();
  }

  private void startOOServer() {
    if (applicationProperties != null) {
      if (applicationProperties.getStartOOServer()) {
        try {
          if (this.officeManager == null) {
            this.officeManager = new DefaultOfficeManagerConfiguration()
              .buildOfficeManager();
            this.officeManager.start();
            this.converterService = new ConverterService(this.officeManager);
          }
        } catch (Throwable e){
          logger.error(e);  
        }
      }
    }
  }

  public byte[] convert(byte[] inputData, String sourceExtension, String targetExtension) {
    byte[] result = null;

    startOOServer();
    ...

أدناه مقتطف s من ApplicationProperties ...

@Component
public class ApplicationProperties implements IApplicationProperties {

  /* Use the appProperties bean defined in WEB-INF/applicationContext.xml
   * which in turn uses resources/server.properties
   */
  @Resource(name="appProperties")
  private Properties appProperties;

  public Boolean getStartOOServer() {
    String val = appProperties.getProperty("startOOServer", "false");
    if( val == null ) return false;
    val = val.trim();
    return val.equalsIgnoreCase("true") || val.equalsIgnoreCase("on") || val.equalsIgnoreCase("yes");
  }



Related