簡體   English   中英

春天如何在setter注入中使用@Required注釋?

[英]How to use @Required annotation in setter injection in spring?

@必需的注釋用法。 我嘗試使用上面的setter方法,並嘗試從上下文中查找Bean,而不設置此依賴項。 我得到的對象的依賴項設置為null,我期望spring會拋出一些異常。 請指導我我做錯了什么?

@Required to make it mandatory that the dependency has to be injected

讓我們舉個例子:我們需要使用RequiredAnnotationPostProcessor來檢查是否已注入@Required依賴項。

public class BankService {
  private CustomerService customerService;
  private BillPaymentService billPaymentService;
  @Required
  public void setCustomerService(CustomerService customerService) {
   this.customerService = customerService;
  }
  @Required
  public void setBillPaymentService(BillPaymentService billPaymentService) {
  this.billPaymentService = billPaymentService;
}
}

配置就像

<bean id="custService" class="xml.CustomerServiceImpl" />
<bean id="billingService" class="xml.BillPaymentServiceImpl" />
<bean id="bankService" class="xml.BankServiceImpl">
 <property name="customerService" ref="custService" />
 <property name="billPaymentService" ref="billingService" />
</bean>
<bean class=”o.s.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />

如果我們沒有同時設置這兩個屬性,我們將在BankService配置中得到一個錯誤,因為兩者都是@Required。

我希望這有幫助!!

Same anwer by bmt - just adding here what i did to verify.

package com.requiredAnnotation;

import org.springframework.beans.factory.annotation.Required;

public class BankService {
    private CustomerService customerService;
    private BillPaymentService billPaymentService;

    @Required
    public void setCustomerService(CustomerService customerService) {
        this.customerService = customerService;
    }

    @Required
    public void setBillPaymentService(BillPaymentService billPaymentService) {
        this.billPaymentService = billPaymentService;
    }

    public BillPaymentService getBillPaymentService() {
        return billPaymentService;
    }

    public CustomerService getCustomerService() {
        return customerService;
    }
}

package com.requiredAnnotation;

public class CustomerService {

}


package com.requiredAnnotation;

public class BillPaymentService {

}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <bean id="customerService" class="com.requiredAnnotation.CustomerService" />
    <bean id="billPaymentService" class="com.requiredAnnotation.BillPaymentService" />
    <bean id="bankService" class="com.requiredAnnotation.BankService">
        <property name="customerService" ref="customerService" />
        <!-- <property name="billPaymentService" ref="billPaymentService" /> -->
    </bean>
    <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />

</beans>

package com.requiredAnnotation;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args)  {
        ConfigurableApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:com/requiredAnnotation/beans-required.xml");

        BankService bankService = applicationContext.getBean(BankService.class);
        System.out.println("bankService got.");
        System.out.println("getCustomerService - " + bankService.getCustomerService());
        System.out.println("getBillPaymentService - " + bankService.getBillPaymentService());
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM