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

Mengapa @Autowired Beans Null dalam Pembina?

DDD
Lepaskan: 2024-11-20 04:17:01
asal
328 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!

sumber:php.cn
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