Cha*_*nya 16 java spring autowired
我对spring框架很新,遇到了以下问题.
我有一个接口ClassA,由分类ClassA1和ClassA2.
我添加了以下bean定义 applicationContext.xml
<bean id="class1" class="com.abc.ClassA1" />
<bean id="class2" class="com.abc.ClassA2" />
Run Code Online (Sandbox Code Playgroud)
我想将两个实现类Autowire如下所示.
@Autowired
private ClassA1 classA1;
@Autowired
private ClassA2 classA2;
Run Code Online (Sandbox Code Playgroud)
上面的代码抛出错误为
无法自动写入字段:com.abc.ClassA1 com.abc.SomeClass.classA1; 嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有匹配的[com.abc.ClassA1]类型的bean
但是,如果我将自动装配更改为接口,如下所示:
@Autowired
ClassA classA1;
Run Code Online (Sandbox Code Playgroud)
然后ClassA1自动连接到变量.我无法知道如何将变量自动装配到ClassA2.
Tar*_*log 13
出于某种原因,您的课程由Spring代理.有很多原因导致这种情况发生.例如,如果您使用JPA或AOP,则会对原始类进行代理.
如果类实现接口,则代理意味着动态代理.所以基本上在运行时创建一个新类来实现接口但不从原始类继承.因此,原始类的自动装配不起作用.
如果您的对象由JDK代理代理,那么它们的接口应该引用它们.您可以使用CGLIB(在类路径上)和proxy-target-class="true"aop配置(in applicationContext.xml)中通过具体类创建代理
我尝试了多种方法来解决这个问题,但我按照以下方式解决了这个问题。
@Autowired
private ClassA classA1;
@Autowired
private ClassA classA2;
Run Code Online (Sandbox Code Playgroud)
在应用程序上下文中,我将 bean 定义如下:
<bean id="classA1" class="com.abc.ClassA1" autowire="byName" />
<bean id="classA2" class="com.abc.ClassA2" autowire="byName" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17768 次 |
| 最近记录: |