Spring - 参考 Java bean 在 XML 中创建 bean,反之亦然

如果我在 Java 中使用 @Bean 创建了一个 bean,那么在 XML 中创建 bean 时如何在 XML 中引用此 bean?如果我在 XML 中创建了一个 bean,那么在 Java 中创建 bean 时如何引用该 bean?



慕田峪7331174
浏览 119回答 3
3回答

神不在的星期二

在Java 类中创建bean 相当于在XML 文件中创建bean。因此,如果您想在 XML 文件中引用在 Java 类中创建的 bean,只需使用ref= beanName属性来引用该 bean,反之亦然。官方文档中写道:4.2.1. 声明一个bean要声明 bean,只需使用 @Bean 注释来注释方法即可。当JavaConfig遇到这样的方法时,它将执行该方法并将返回值注册为BeanFactory中的bean。默认情况下,bean 名称将是方法名称。@Configurationpublic class AppConfig {&nbsp; &nbsp; @Bean&nbsp; &nbsp; public TransferService transferService() {&nbsp; &nbsp; &nbsp; &nbsp; return new TransferServiceImpl();&nbsp; &nbsp; }}上面的内容与下面的appConfig.xml完全等效:<beans>&nbsp; &nbsp; <bean name="transferService" class="com.company.TransferServiceImpl"/></beans>两者都会导致 BeanFactory/ApplicationContext 中存在一个名为 TransferService 的 bean,该 bean 绑定到 TransferServiceImpl 类型的对象实例:而且您还需要确保添加<bean class="org.springframework.config.java.process.ConfigurationPostProcessor"/>&nbsp;在您的 xml 中,因此如果您的 XML 配置和 Java 配置在不同的上下文中声明,则它们具有相同的 bean 定义。如果您想将传统的 bean 配置从 XML 包含到 Java 配置,那么您需要将 XML 资源导入到该类,如下所示:@ImportResource({"classpath*:your-configuration.xml"})

慕哥6287543

其他答案仅回答了图片的一部分。让我尝试总结一下大局。关键点是每个 bean 都有一个在 spring 容器中唯一的标识符。我们可以使用这个标识符来引用 bean。bean 标识符可以通过以下方式配置:XML:id和name属性<bean/>Java配置:value和name中的属性@Bean。value属性 in@Component及其构造型注释,例如等@Service。@Controller如果未显式配置标识符,则根据 Bean 的声明方式,将为它们生成一个默认标识符:对于使用 XML 及其构造型声明的 bean ,它是采用lowerCamelCase@Component格式的该 bean 的类名。对于使用 声明的 bean&nbsp;@Bean,它是该 bean 方法的名称要引用 XML 中 Java 配置中声明的 bean,请使用ref属性来引用其标识符,例如:&nbsp;&nbsp;&nbsp;<bean&nbsp;name="foo"&nbsp;class="com.example.Foo"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<property&nbsp;name="service"&nbsp;ref="bar"/> &nbsp;&nbsp;&nbsp;&nbsp;</bean>所以service属性是对一个 bean 的引用,其标识符被称为bar要在 Java 中引用 XML 中声明的 bean,您只需@Autowired在字段上进行注释即可。如果只有一个 Spring bean 的类型与该字段的类型相同(本例中为 Bar),则该 bean 将自动被引用并注入。它被称为按类型自动连接,您不需要通过 bean 标识符来引用它:@Servicepublic class Foo {&nbsp; &nbsp;@Autowired&nbsp; &nbsp;&nbsp; &nbsp;private Bar service;}另一方面,如果有多个类型也是 Bar 的 bean,则必须使用@Qualifierbean 标识符来引用这些 Bar beans 中的特定 bean。这称为按名称自动连接:@Servicepublic class Foo {&nbsp; &nbsp;@Autowired&nbsp; &nbsp;&nbsp; &nbsp;@Qualifier("bar123")&nbsp; &nbsp;private Bar service;}

慕姐8265434

您可以创建一个简单的 Spring bean、Grandmother,并添加对 beans MotherBean 和 FatherBean 的引用。您有两种方法可以做到这一点:第一种方法豆奶奶:@Service("grandmotherBean")public class Grandmother {&nbsp; &nbsp; @Autowired&nbsp; &nbsp; private MotherBean motherBean;&nbsp; &nbsp; @Autowired&nbsp; &nbsp; private FatherBean father;}豆妈妈来了@Service("motherBeanBean")public class MotherBean {public MotherBean() {}@Overridepublic String toString() {&nbsp; &nbsp; return " it is me ! MotherBean";}}豆爸爸来了@Service("fatherBeanBean")public class FatherBean {&nbsp; &nbsp; public&nbsp; FatherBean (){&nbsp; &nbsp; }&nbsp; &nbsp; @Override&nbsp; &nbsp; public String toString() {&nbsp; &nbsp; &nbsp; &nbsp; return " it is me ! FatherBean";&nbsp; &nbsp; }}另一种方法是您可以直接配置 Spring bean 引用applicationContext.xml第二种方法<beans xmlns="http://www.springframework.org/schema/beans"&nbsp; &nbsp; <bean id="Grandmother"&nbsp; &nbsp; &nbsp; &nbsp; class="com.dulaj.stack.Grandmother">&nbsp; &nbsp; &nbsp; &nbsp; <property name="FatherBean" >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <ref local="fatherBeanBean"/>&nbsp; &nbsp; &nbsp; &nbsp; </property>&nbsp; &nbsp; </bean>&nbsp; <bean id="fatherBeanBean" class="com.dulaj.stack.FatherBean">&nbsp; &nbsp; </bean>&nbsp;&nbsp;</beans>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java