gpt4 book ai didi

java - Autowiring 注释在 spring 中给出 null 值

转载 作者:行者123 更新时间:2023-12-01 21:59:20 25 4
gpt4 key购买 nike

    public class Address {

String street;
//set &get
}


public class Person {

int id;

String name;

@Autowired
Address address;
//set &get
}

xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<context:annotation-config />

<bean id="Address" class="bean.Address">
<property name="street" value="baglur"></property>
</bean>


<bean id="Person" class="bean.Person" autowire="byType" >
<property name="id" value="786"></property>
<property name="name" value="saurabh"></property>


</bean>

</beans>

测试

public class Test {
public static void main(String[] args) {
Resource resource=new ClassPathResource("applicationContext.xml");
BeanFactory factory=new XmlBeanFactory(resource);
Person p = (Person)factory.getBean("Person");
System.out.println(p.getInfo());
}

在这里,我尝试使用 @Autowire 注释来实现 Autowiring byType 功能,但我得到的地址为空值,但使用 autowire ="byType"我得到了正确的输出。这里出了什么问题?

最佳答案

那是因为您正在使用已弃用的 XmlBeanFactory它不会激活注释 bean 后处理器(特别是: AutowiredAnnotationBeanPostProcessor ),因此 <context:annotation-config />本质上被忽略了。

改变

BeanFactory factory=new XmlBeanFactory(resource);

BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");

解决了问题。

评论:为了让按名称 Autowiring 策略发挥作用,您应该使用驼峰式大小写形式命名您的 bean 名称,addressperson在这种情况下。

关于java - Autowiring 注释在 spring 中给出 null 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33840912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com