Rumah > Java > javaTutorial > Mengapa @Autowired Beans Null dalam Pembina?

Mengapa @Autowired Beans Null dalam Pembina?

DDD
Lepaskan: 2024-11-20 04:17:01
asal
351 orang telah melayarinya

Why Are @Autowired Beans Null in Constructors?

Memahami Null @Autowired Beans dalam Pembina

Dalam aplikasi Spring berasaskan Java, kebergantungan @Autowired biasanya disuntik selepas instantiasi kacang. Ini bermakna jika anda merujuk kacang @Autowired dalam pembina, ia akan menjadi batal.

Dalam coretan kod yang disediakan, anda cuba menggunakan kacang @Autowired applicationProperties dalam pembina DocumentManager, tetapi ia pada mulanya mengembalikan null . Ini adalah gelagat yang dijangka kerana kacang @Autowired belum lagi tersedia semasa pembinaan.

Untuk memintas isu ini, pertimbangkan untuk mengalihkan sebarang logik permulaan yang bergantung pada @Autowired beans ke kaedah pasca pembinaan berasingan yang dianotasi dengan @PostConstruct. Kaedah @PostConstruct dilaksanakan selepas instantiasi kacang dan sebelum kacang sedia untuk digunakan.

Dalam kod yang diperbetulkan di bawah, kaedah startOOServer() telah dialihkan ke kaedah @PostConstruct:

@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;


  // Constructors may not access @Autowired beans, so move this logic to a @PostConstruct method

  public DocumentManager() {
  }

  @PostConstruct
  public 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();
    ...
}
Salin selepas log masuk

Dengan menggunakan kaedah @PostConstruct, kod permulaan kini boleh bergantung dengan selamat pada kebergantungan @Autowired yang tersedia.

Atas ialah kandungan terperinci Mengapa @Autowired Beans Null dalam Pembina?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan