如何通过@Component与@Value注解传递引用并为Address的ad属性赋值?
问题解决方案
一、用@Component和@Value实现依赖注入与属性赋值
1. 让Address成为Spring托管Bean
你的Address类没加@Component注解,Spring不会创建它的实例,自然没法注入到Student里。给Address加上注解,同时用@Value给ad属性赋值:
package com.spring.stereotype; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class Address { // 直接硬编码赋值,也可以读取配置文件,比如@Value("${address.detail}") @Value("北京市朝阳区建国路") private String ad; // 原有getter、setter和toString方法保持不变 }
2. 给Student注入Address实例
Student里的ad属性需要告诉Spring自动注入Address实例,有两种实现方式:
方式1:用@Autowired(最常用)
package com.spring.stereotype; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component("obj") public class Student { @Autowired private Address ad; // 原有getter、setter方法保持不变 }
方式2:用@Value实现引用传递
如果要通过@Value指定具体的Bean(比如给Address自定义Bean名称),可以这么写:
先给Address指定Bean名:
@Component("myAddress") public class Address { // ... 原有代码不变 }
然后在Student里用@Value引用这个Bean:
@Value("#{myAddress}") private Address ad;
二、修复context:component-scan的XML配置错误
这个标签报错大概率是缺少context命名空间声明,或者包路径拼写错误。完整的XML配置应该如下:
<?xml version="1.0" encoding="UTF-8"?> <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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.spring.stereotype"/> </beans>
另外检查base-package的值是否和你的实际包结构一致,避免包名拼写错误。
三、测试运行
修改完成后运行Main类,控制台会输出Address [ad=北京市朝阳区建国路],说明依赖注入和属性赋值都已生效。
内容的提问来源于stack exchange,提问作者user19379961
相关产品推荐
相关产品推荐

