org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named ‘userDao’ is expected to be of type ‘first3.com.zut.aop.annotation.UserDaoImpl’ but was actually of type ‘com.sun.proxy.$Proxy12’
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:384)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1089)
at first3.com.zut.aop.annotation.TestAspectJ.test01(TestAspectJ.java:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner
2.
e
v
a
l
u
a
t
e
(
P
a
r
e
n
t
R
u
n
n
e
r
.
j
a
v
a
:
268
)
a
t
o
r
g
.
j
u
n
i
t
.
r
u
n
n
e
r
s
.
P
a
r
e
n
t
R
u
n
n
e
r
.
r
u
n
(
P
a
r
e
n
t
R
u
n
n
e
r
.
j
a
v
a
:
363
)
a
t
o
r
g
.
j
u
n
i
t
.
r
u
n
n
e
r
.
J
U
n
i
t
C
o
r
e
.
r
u
n
(
J
U
n
i
t
C
o
r
e
.
j
a
v
a
:
137
)
a
t
o
r
g
.
j
u
n
i
t
.
r
u
n
n
e
r
.
J
U
n
i
t
C
o
r
e
.
r
u
n
(
J
U
n
i
t
C
o
r
e
.
j
a
v
a
:
115
)
a
t
o
r
g
.
j
u
n
i
t
.
v
i
n
t
a
g
e
.
e
n
g
i
n
e
.
e
x
e
c
u
t
i
o
n
.
R
u
n
n
e
r
E
x
e
c
u
t
o
r
.
e
x
e
c
u
t
e
(
R
u
n
n
e
r
E
x
e
c
u
t
o
r
.
j
a
v
a
:
40
)
a
t
j
a
v
a
.
u
t
i
l
.
s
t
r
e
a
m
.
F
o
r
E
a
c
h
O
p
s
2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at org.junit.runner.JUnitCore.run(JUnitCore.java:115) at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:40) at java.util.stream.ForEachOps
2.evaluate(ParentRunner.java:268)atorg.junit.runners.ParentRunner.run(ParentRunner.java:363)atorg.junit.runner.JUnitCore.run(JUnitCore.java:137)atorg.junit.runner.JUnitCore.run(JUnitCore.java:115)atorg.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:40)atjava.util.stream.ForEachOpsForEachOp$OfRef.accept(Unknown Source)
at java.util.stream.ReferencePipeline$3
1.
a
c
c
e
p
t
(
U
n
k
n
o
w
n
S
o
u
r
c
e
)
a
t
j
a
v
a
.
u
t
i
l
.
I
t
e
r
a
t
o
r
.
f
o
r
E
a
c
h
R
e
m
a
i
n
i
n
g
(
U
n
k
n
o
w
n
S
o
u
r
c
e
)
a
t
j
a
v
a
.
u
t
i
l
.
S
p
l
i
t
e
r
a
t
o
r
s
1.accept(Unknown Source) at java.util.Iterator.forEachRemaining(Unknown Source) at java.util.Spliterators
1.accept(UnknownSource)atjava.util.Iterator.forEachRemaining(UnknownSource)atjava.util.SpliteratorsIteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ForEachOps
F
o
r
E
a
c
h
O
p
.
e
v
a
l
u
a
t
e
S
e
q
u
e
n
t
i
a
l
(
U
n
k
n
o
w
n
S
o
u
r
c
e
)
a
t
j
a
v
a
.
u
t
i
l
.
s
t
r
e
a
m
.
F
o
r
E
a
c
h
O
p
s
ForEachOp.evaluateSequential(Unknown Source) at java.util.stream.ForEachOps
ForEachOp.evaluateSequential(UnknownSource)atjava.util.stream.ForEachOpsForEachOp
O
f
R
e
f
.
e
v
a
l
u
a
t
e
S
e
q
u
e
n
t
i
a
l
(
U
n
k
n
o
w
n
S
o
u
r
c
e
)
a
t
j
a
v
a
.
u
t
i
l
.
s
t
r
e
a
m
.
A
b
s
t
r
a
c
t
P
i
p
e
l
i
n
e
.
e
v
a
l
u
a
t
e
(
U
n
k
n
o
w
n
S
o
u
r
c
e
)
a
t
j
a
v
a
.
u
t
i
l
.
s
t
r
e
a
m
.
R
e
f
e
r
e
n
c
e
P
i
p
e
l
i
n
e
.
f
o
r
E
a
c
h
(
U
n
k
n
o
w
n
S
o
u
r
c
e
)
a
t
o
r
g
.
j
u
n
i
t
.
v
i
n
t
a
g
e
.
e
n
g
i
n
e
.
V
i
n
t
a
g
e
T
e
s
t
E
n
g
i
n
e
.
e
x
e
c
u
t
e
A
l
l
C
h
i
l
d
r
e
n
(
V
i
n
t
a
g
e
T
e
s
t
E
n
g
i
n
e
.
j
a
v
a
:
80
)
a
t
o
r
g
.
j
u
n
i
t
.
v
i
n
t
a
g
e
.
e
n
g
i
n
e
.
V
i
n
t
a
g
e
T
e
s
t
E
n
g
i
n
e
.
e
x
e
c
u
t
e
(
V
i
n
t
a
g
e
T
e
s
t
E
n
g
i
n
e
.
j
a
v
a
:
71
)
a
t
o
r
g
.
j
u
n
i
t
.
p
l
a
t
f
o
r
m
.
l
a
u
n
c
h
e
r
.
c
o
r
e
.
D
e
f
a
u
l
t
L
a
u
n
c
h
e
r
.
e
x
e
c
u
t
e
(
D
e
f
a
u
l
t
L
a
u
n
c
h
e
r
.
j
a
v
a
:
229
)
a
t
o
r
g
.
j
u
n
i
t
.
p
l
a
t
f
o
r
m
.
l
a
u
n
c
h
e
r
.
c
o
r
e
.
D
e
f
a
u
l
t
L
a
u
n
c
h
e
r
.
l
a
m
b
d
a
OfRef.evaluateSequential(Unknown Source) at java.util.stream.AbstractPipeline.evaluate(Unknown Source) at java.util.stream.ReferencePipeline.forEach(Unknown Source) at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80) at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:71) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229) at org.junit.platform.launcher.core.DefaultLauncher.lambda
OfRef.evaluateSequential(UnknownSource)atjava.util.stream.AbstractPipeline.evaluate(UnknownSource)atjava.util.stream.ReferencePipeline.forEach(UnknownSource)atorg.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)atorg.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:71)atorg.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)atorg.junit.platform.launcher.core.DefaultLauncher.lambdaexecute$6(DefaultLauncher.java:197)
at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:137)
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
spring使用的动态代理有两种:JDK Proxy 和CGLIB。
问题出在这行代码上,不能用接口的实现类( UserServiceImpl)来转换Proxy的实现类,它们是同级,应该用共同的接口(UserService)来转换 **
UserDao userDao = applicationContext.getBean(“userDao”,
UserDaoImpl.class);
应改为:
UserDao userDao = applicationContext.getBean(“userDao”,
UserDao.class);