3 回答

TA貢獻1963條經驗 獲得超6個贊
在Java 類中創(chuàng)建bean 相當于在XML 文件中創(chuàng)建bean。因此,如果您想在 XML 文件中引用在 Java 類中創(chuàng)建的 bean,只需使用ref= beanName屬性來引用該 bean,反之亦然。
官方文檔中寫道:
4.2.1. 聲明一個bean
要聲明 bean,只需使用 @Bean 注釋來注釋方法即可。當JavaConfig遇到這樣的方法時,它將執(zhí)行該方法并將返回值注冊為BeanFactory中的bean。默認情況下,bean 名稱將是方法名稱。
@Configuration
public class AppConfig {
@Bean
public TransferService transferService() {
return new TransferServiceImpl();
}
}
上面的內容與下面的appConfig.xml完全等效:
<beans>
<bean name="transferService" class="com.company.TransferServiceImpl"/>
</beans>
兩者都會導致 BeanFactory/ApplicationContext 中存在一個名為 TransferService 的 bean,該 bean 綁定到 TransferServiceImpl 類型的對象實例:
而且您還需要確保添加
<bean class="org.springframework.config.java.process.ConfigurationPostProcessor"/>
在您的 xml 中,因此如果您的 XML 配置和 Java 配置在不同的上下文中聲明,則它們具有相同的 bean 定義。
如果您想將傳統(tǒng)的 bean 配置從 XML 包含到 Java 配置,那么您需要將 XML 資源導入到該類,如下所示:
@ImportResource({"classpath*:your-configuration.xml"})

TA貢獻1831條經驗 獲得超10個贊
其他答案僅回答了圖片的一部分。讓我嘗試總結一下大局。關鍵點是每個 bean 都有一個在 spring 容器中唯一的標識符。我們可以使用這個標識符來引用 bean。
bean 標識符可以通過以下方式配置:
XML:
id
和name
屬性<bean/>
Java配置:
value
和name
中的屬性@Bean
。value
屬性 in@Component
及其構造型注釋,例如等@Service
。@Controller
如果未顯式配置標識符,則根據(jù) Bean 的聲明方式,將為它們生成一個默認標識符:
對于使用 XML 及其構造型聲明的 bean ,它是采用lowerCamelCase
@Component
格式的該 bean 的類名。對于使用 聲明的 bean
@Bean
,它是該 bean 方法的名稱
要引用 XML 中 Java 配置中聲明的 bean,請使用ref
屬性來引用其標識符,例如:
<bean name="foo" class="com.example.Foo"> <property name="service" ref="bar"/> </bean>
所以service
屬性是對一個 bean 的引用,其標識符被稱為bar
要在 Java 中引用 XML 中聲明的 bean,您只需@Autowired
在字段上進行注釋即可。如果只有一個 Spring bean 的類型與該字段的類型相同(本例中為 Bar),則該 bean 將自動被引用并注入。它被稱為按類型自動連接,您不需要通過 bean 標識符來引用它:
@Service
public class Foo {
@Autowired
private Bar service;
}
另一方面,如果有多個類型也是 Bar 的 bean,則必須使用@Qualifierbean 標識符來引用這些 Bar beans 中的特定 bean。這稱為按名稱自動連接:
@Service
public class Foo {
@Autowired
@Qualifier("bar123")
private Bar service;
}

TA貢獻1813條經驗 獲得超2個贊
您可以創(chuàng)建一個簡單的 Spring bean、Grandmother,并添加對 beans MotherBean 和 FatherBean 的引用。
您有兩種方法可以做到這一點:
第一種方法
豆奶奶:
@Service("grandmotherBean")
public class Grandmother {
@Autowired
private MotherBean motherBean;
@Autowired
private FatherBean father;
}
豆媽媽來了
@Service("motherBeanBean")
public class MotherBean {
public MotherBean() {
}
@Override
public String toString() {
return " it is me ! MotherBean";
}
}
豆爸爸來了
@Service("fatherBeanBean")
public class FatherBean {
public FatherBean (){
}
@Override
public String toString() {
return " it is me ! FatherBean";
}
}
另一種方法是您可以直接配置 Spring bean 引用applicationContext.xml
第二種方法
<beans xmlns="http://www.springframework.org/schema/beans"
<bean id="Grandmother"
class="com.dulaj.stack.Grandmother">
<property name="FatherBean" >
<ref local="fatherBeanBean"/>
</property>
</bean>
<bean id="fatherBeanBean" class="com.dulaj.stack.FatherBean">
</bean>
</beans>
添加回答
舉報