Spring Autowiring class vs. interface?

2019-01-04 01:29发布

I have this Spring config:

<bean id="boo" class="com.x.TheClass"/>

The class TheClass implements TheInterface. Then I have this (hypothetical) Java code:

@Autowired
TheInterface x;

@Autowired
TheClass y;

The autowiring of TheInterface works but the autowiring of TheClass fails. Spring gives me a NoSuchBeanDefinitionException for the class.

Why can you wire the interface and not the class?

1条回答
劫难
2楼-- · 2019-01-04 01:55

Normally, both will work, you can autowire interfaces or classes.

There's probably an autoproxy generator somewhere in your context, which is wrapping your boo bean in a generated proxy object. This proxy object will implement TheInterface, but will not be a TheClass. When using autoproxies, you need to program to the interface, not the implementation.

The likely candidate is transactional proxies - are you using Spring transactions, using AspectJ or @Transactional?

查看更多
登录 后发表回答