spring - Spring:UnsatisfiedDependencyException 即使限定符属性匹配
问题描述
摘要:我正在使用一些示例 Spring 代码(来自 javabrains.io)。基本上,这段代码说明了@Qualifier
Java 文件中注解的使用。bean 元素之一 (in spring.xml
) 具有与@Qualifier
注释的值匹配的限定符,但即便如此,也会UnsatisfiedDependencyException
被抛出。
详细信息:该类Circle
有一个接受Point
对象并具有以下注释的方法:
@Autowired
@Qualifier("circleRelated")
我们spring.xml
有三个 Point bean pointA
:pointB
和pointC
。 pointA
将 property 属性设置为circleRelated
. 可以预期,由于该 bean 符合限定符标准(即 value = "circleRelated"),因此在初始化时自动装配应该顺利完成。然而,UnsatisfiedDependencyException
被抛出。源代码如下:
Point.java
package org.koushik.javabrains;
public class Point {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
Circle.java
package org.koushik.javabrains;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class Circle {
private Point center;
public Point getCenter() {
return center;
}
@Autowired
@Qualifier("circleRelated")
public void setCenter(Point center) {
this.center = center;
}
public void draw() {
System.out.println("Drawing Circle");
System.out.println("Circle: Center point is: " + center.getX() + ", " + center.getY());
}
}
绘图应用程序.java
package org.koushik.javabrains;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DrawingApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
Circle circle = (Circle) context.getBean("circle");
circle.draw();
}
}
春天.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"
xmlns:context="http://www.springframework.org/schema/context">
<bean id="pointA" class="org.koushik.javabrains.Point">
<qualifier value="circleRelated"/>
<property name="x" value ="0"/>
<property name="y" value ="0"/>
</bean>
<bean id="pointB" class="org.koushik.javabrains.Point">
<property name="x" value ="-20"/>
<property name="y" value ="0"/>
</bean>
<bean id="pointC" class="org.koushik.javabrains.Point">
<property name="x" value ="20"/>
<property name="y" value ="0"/>
</bean>
<bean id="circle" class="org.koushik.javabrains.Circle">
</bean>
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
</beans>
解决方案
你不见了
<context:annotation-config/>
在你的 spring.xml 中标记
使用这些注解还需要在 Spring 容器中注册某些 BeanPostProcessor。与往常一样,这些可以注册为单独的 bean 定义,但它们也可以通过在基于 XML 的 Spring 配置中包含以下标记来隐式注册(注意包含“上下文”命名空间):
附带说明一下,您使用基于 xml 的配置的任何具体原因?虽然 spring 支持 xml 配置,但人们已经很久没有转向基于注解的配置了。我建议值得探索基于注解的路由。
推荐阅读
- angular - 如何显示点击的文本?
- python - 如何在python中获取对象的属性
- python - 打印骰子滚动所有 6 个面时的概率
- java - 如何使用 MyBatis 创建 alter table 语句?MySQLSyntaxErrorException:您的 SQL 语法有错误
- firebase - vips_realpath 和 vips__file_open_write:无法形成文件名 unix 错误 firebase cloud_functions
- java - 抽象方法上的不同列表返回类型
- sql-server - 数据流任务中的快速加载生成过大的 SQL 表
- apache-spark - Spark 安装 - 运行 spark-shell 命令时出现警告和错误
- java - 关于转换变量、parseInt 以及如何在我的输出中添加/更改特定数字
- java - 查找数组之间的相似值