3 回答
TA贡献1963条经验 获得超6个赞
在Java 类中创建bean 相当于在XML 文件中创建bean。因此,如果您想在 XML 文件中引用在 Java 类中创建的 bean,只需使用ref= beanName属性来引用该 bean,反之亦然。
官方文档中写道:
4.2.1. 声明一个bean
要声明 bean,只需使用 @Bean 注释来注释方法即可。当JavaConfig遇到这样的方法时,它将执行该方法并将返回值注册为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 定义。
如果您想将传统的 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
如果未显式配置标识符,则根据 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个赞
您可以创建一个简单的 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>
添加回答
举报