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




1 Answers

Autowiring (رابط من تعليق Dunes) بعد بناء كائن. لذلك لن يتم تعيينهم إلا بعد اكتمال المنشيء.

إذا كنت بحاجة إلى تشغيل بعض رموز التهيئة ، فيجب أن تكون قادرًا على سحب التعليمة البرمجية في المُنشئ إلى طريقة ، @PostConstruct تعليق توضيحي لتلك الطريقة باستخدام @PostConstruct .

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

في جزء التعليمات البرمجية أدناه 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

java spring autowired