Java 没有显式依赖声明的Springbean注入?
我在这个项目上工作了几个月,甚至没有注意到这一点,昨天,在编辑了一个类文件(用getter/setter插入了新的依赖bean)之后,我忘记了显式添加:Java 没有显式依赖声明的Springbean注入?,java,spring,aop,javabeans,Java,Spring,Aop,Javabeans,我在这个项目上工作了几个月,甚至没有注意到这一点,昨天,在编辑了一个类文件(用getter/setter插入了新的依赖bean)之后,我忘记了显式添加: <property name="deviceService" ref="deviceService"/> 所以我猜这和SpringAOP有关 我必须补充的是,我并没有从头开始这个项目,它已经配置好了,它使用SpringAOP来划分事务,还有一些日志记录的目的 编辑 一些附加信息:项目还集成了ZK Ajax和Hibernate。这个
<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(如事务、安全等)的功能。我认为这是因为自动连线:我认为这是因为自动连线:检查您的配置中是否有以下内容之一 上下文:注释配置或上下文:组件扫描以及
检查您的配置中是否存在以下情况之一 上下文:注释配置或上下文:组件扫描以及
我使用的唯一注释是@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>