开发者社区 问答 正文

Spring IOC在Service里注入dao时,dao引用依然为空! 求指教

<!-- 事务相关配置 -->
<tx:advice id="txdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED" read-only="false"
  rollback-for="java.lang.Exception" no-rollback-for="java.lang.RuntimeException"/>
<tx:method name="insert*" propagation="REQUIRED" read-only="false"
  rollback-for="java.lang.RuntimeException" />
<tx:method name="update*" propagation="REQUIRED" read-only="false"
  rollback-for="java.lang.Exception" />


<tx:method name="find*" propagation="SUPPORTS"/>
<tx:method name="get*" propagation="SUPPORTS"/>
<tx:method name="select*" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>


<aop:config>
<aop:pointcut id="pc" expression="execution(public * org.ssm.services.impl.*.*(..))" /> <!--把事务控制在Service层-->


<aop:advisor pointcut-ref="pc" advice-ref="txdvice" />
</aop:config>


<context:component-scan base-package="org.ssm.services.impl"
        name-generator="org.ssm.overwrite.spring.ServicesNameGenerator"
        use-default-filters="false"
        annotation-config="false">
<context:include-filter type="regex" expression=".*Impl"/>
</context:component-scan>

Service的dao还是无法注入呀,求指教哦, 谢谢!!!

错误的原因是Services里面 userDao 是空的 ,spring 没有成功注入
screenshot

展开
收起
a123456678 2016-03-16 17:30:57 2919 分享 版权
1 条回答
写回答
取消 提交回答
  • 官方文档有说明,BeanPostProcessors and AOP auto-proxying,使用后者的话前者就不生效了,因为动态代理实际上自身就相当于一个BeanPostProcessors。还有,你的代码里这个类是处理impl结尾的,但是用cglib生成的动态类名后面会多一些标识,因此要改成判断prefix包名。如果用jdk proxy则是sun生成的代理类,情况更加不同。关键是,代理类每次都会生成新的,不会保存到beanfactory中,因此解决方法是在aop生成代理类之后再注入依赖bean,这样是可行的,可以找下aop的相关接口。

    2019-07-17 19:04:11
    赞同 展开评论