Spring:自动装配字段为空
我需要将外部 lib 类连接到我的 bean,以便将其用作单例。
.xml 配置:
<bean id="myBean" class="com.my.MyBean">
<property name="someLib" value="com.ExternalBean" />
</bean>
java bean:
@Service
public class MyBean {
@Autowired
private ExternalBean externalBean;
public void setExternalBean(ExternalBean externalBean) {
this.externalBean = externalBean;
}
此外,我在公共方法中使用有线变量 externalBean
,以免在每个方法调用中实例化它。 问题是它null
。
我是否正确连接 bean?什么是错误。
I need to wire external lib class to my bean,in order to use it as singleton.
.xml config:
<bean id="myBean" class="com.my.MyBean">
<property name="someLib" value="com.ExternalBean" />
</bean>
java bean:
@Service
public class MyBean {
@Autowired
private ExternalBean externalBean;
public void setExternalBean(ExternalBean externalBean) {
this.externalBean = externalBean;
}
Further I use wired variable externalBean
in public method ,in order not to instantiate it in every method call.
Problem is it null
.
Do I wire bean correctly?What is mistake.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您必须将外部类定义为 bean 才能使 @Autowired 工作。
另外,如果您使用@Autowired,则不需要设置器。
You have to define the external class as a bean in order to make @Autowired work.
Also, if you use @Autowired you don't need the setter for it.
卢达克拉瓦是对的。可能导致问题的第二件事是,您有一个
myBean
的 xml bean 声明,并使用@Service
附加注释该 bean。我想一旦使用启用组件扫描就会引起麻烦。loodakrawa is right. A second thing that can cause a problem is, that you have a xml bean declaration for
myBean
and additional annotated the bean with@Service
. I guess this will cause trouble as soon as use enable component scan.我认为更好的想法是使用上下文路径扫描:
确保所有这些类都在包内。然后使用注释之一(
@Repository、@Service、@Component
)标记这两个类。好处之一是不需要二传手。
PS:如果你使用scan base,你不需要将类声明为bean,注释就足够了
I think that the better ide ais to use context path scan:
Make sure that all these classes are within the package. Then mark both classes with one of the Annotations (
@Repository, @Service, @Component
).One of the benefits, no setter required.
P.S: If you re using scan base you don't need to declare class as bean, annotations are enough