Java 没有显式依赖声明的Springbean注入?

Java 没有显式依赖声明的Springbean注入?,java,spring,aop,javabeans,Java,Spring,Aop,Javabeans,我在这个项目上工作了几个月,甚至没有注意到这一点,昨天,在编辑了一个类文件(用getter/setter插入了新的依赖bean)之后,我忘记了显式添加: <property name="deviceService" ref="deviceService"/> 所以我猜这和SpringAOP有关 我必须补充的是,我并没有从头开始这个项目,它已经配置好了,它使用SpringAOP来划分事务,还有一些日志记录的目的 编辑 一些附加信息:项目还集成了ZK Ajax和Hibernate。这个

我在这个项目上工作了几个月,甚至没有注意到这一点,昨天,在编辑了一个类文件(用getter/setter插入了新的依赖bean)之后,我忘记了显式添加:

<property name="deviceService" ref="deviceService"/>
所以我猜这和SpringAOP有关

我必须补充的是,我并没有从头开始这个项目,它已经配置好了,它使用SpringAOP来划分事务,还有一些日志记录的目的

编辑
一些附加信息:项目还集成了ZK Ajax和Hibernate。这个服务bean基本上是DAOBean的包装器;刀豆反过来是spring的HibernateTemplate的包装。服务和DAOBean是单例范围的。被注入的服务被注入到原型范围的MVC控制器bean中。服务bean来自用于DB事务划分的包:

<tx:advice id="serviceTxAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="*" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="serviceMethodsRMS"
        expression="execution(* org.irvas.amregina.backend.service.*.*(..))" />
    <aop:advisor advice-ref="serviceTxAdvice" pointcut-ref="serviceMethodsRMS" />
</aop:config>

那么,有人能向我解释一下发生了什么事,或者是什么原因吗?

谢谢。

在xml的根bean标记上有一个属性default autowire byname/default autowire bytype。如果设置为true,那么spring将自动注入依赖项。默认情况下,它被设置为false-我猜在您的情况下,上面的标志之一被设置为true


AOP不涉及依赖项注入。您看到代理是因为正在注入的对象正在使用spring的某些需要aop(如事务、安全等)的功能。

在xml的根bean标记上有一个属性默认autowire byname/默认autowire bytype。如果设置为true,那么spring将自动注入依赖项。默认情况下,它被设置为false-我猜在您的情况下,上面的标志之一被设置为true


AOP不涉及依赖项注入。您之所以看到代理,是因为正在注入的对象正在使用spring的某些需要aop(如事务、安全等)的功能。

我认为这是因为自动连线:

我认为这是因为自动连线:

检查您的配置中是否有以下内容之一

上下文:注释配置或上下文:组件扫描以及

  • Springbeans上的注释以及@Component,用于按类型自动操作

  • 注释,它在SpringBean中按名称+@组件进行自动连接,因为您在spring配置中没有定义任何Bean。SpingBeans将使类名的第一个字母小写

  • @gkamal已经讨论过的默认autowire=“bytype”

  • 默认autowire=“byname”+一个@组件

  • 默认autowire=“自动检测”


  • 检查您的配置中是否存在以下情况之一

    上下文:注释配置或上下文:组件扫描以及

  • Springbeans上的注释以及@Component,用于按类型自动操作

  • 注释,它在SpringBean中按名称+@组件进行自动连接,因为您在spring配置中没有定义任何Bean。SpingBeans将使类名的第一个字母小写

  • @gkamal已经讨论过的默认autowire=“bytype”

  • 默认autowire=“byname”+一个@组件

  • 默认autowire=“自动检测”


  • 我使用的唯一注释是@Secured。我使用的唯一注释是@Secured。好的,它一定是关于自动布线的,但我刚刚检查了所有配置,它们都没有默认的autowire或autowire属性集(它们不在bean/bean标记中),所以它使用某种默认设置。这真的很奇怪,因为我希望默认设置为“否…”更糟糕的是,我在所有4个上下文配置文件中显式地为依赖bean设置了默认autowire=“no”和autowire=“no”。注射仍然有效。。。我应该再次指出,这个服务类来自在aop切入点表达式中为事务划分而设置的包。您可以在setter方法中放置一个断点,并查看调用的来源。如果不能在IDE中运行,可以记录stacktrace(创建异常并记录)。感谢gkamal,调用堆栈显示它与ZK的component composer有关——它做了一些现场布线。我会接受你的回答,尽管这似乎超出了spring相关问题的范围。好吧,这一定是关于自动布线的,但我刚刚检查了所有配置,它们都没有默认的autowire或autowire属性集(它们不在beans/bean标记中),所以它使用某种默认设置。这真的很奇怪,因为我希望默认设置为“否…”更糟糕的是,我在所有4个上下文配置文件中显式地为依赖bean设置了默认autowire=“no”和autowire=“no”。注射仍然有效。。。我应该再次指出,这个服务类来自在aop切入点表达式中为事务划分而设置的包。您可以在setter方法中放置一个断点,并查看调用的来源。如果不能在IDE中运行,可以记录stacktrace(创建异常并记录)。感谢gkamal,调用堆栈显示它与ZK的component composer有关——它做了一些现场布线。我会接受你的回答,尽管这似乎超出了spring相关问题的范围。
    <tx:advice id="serviceTxAdvice" transaction-manager="transactionManager">
        <tx:attributes>
        <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
    
    <aop:config>
        <aop:pointcut id="serviceMethodsRMS"
            expression="execution(* org.irvas.amregina.backend.service.*.*(..))" />
        <aop:advisor advice-ref="serviceTxAdvice" pointcut-ref="serviceMethodsRMS" />
    </aop:config>