Spring:自动装配字段为空

发布于 2024-12-16 18:42:13 字数 561 浏览 2 评论 0原文

我需要将外部 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

黑白记忆 2024-12-23 18:42:13

您必须将外部类定义为 bean 才能使 @Autowired 工作。

<bean id="externalBean" class="some.external.package.ExternalBean">
</bean>

<bean id="myBean" class="com.my.MyBean">
</bean>

另外,如果您使用@Autowired,则不需要设置器。

You have to define the external class as a bean in order to make @Autowired work.

<bean id="externalBean" class="some.external.package.ExternalBean">
</bean>

<bean id="myBean" class="com.my.MyBean">
</bean>

Also, if you use @Autowired you don't need the setter for it.

拍不死你 2024-12-23 18:42:13

卢达克拉瓦是对的。可能导致问题的第二件事是,您有一个 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.

请止步禁区 2024-12-23 18:42:13

我认为更好的想法是使用上下文路径扫描:

<context:component-scan base-package="some.external.package">
</context:component-scan>

确保所有这些类都在包内。然后使用注释之一(@Repository、@Service、@Component)标记这两个类。

好处之一是不需要二传手。

PS:如果你使用scan base,你不需要将类声明为bean,注释就足够了

I think that the better ide ais to use context path scan:

<context:component-scan base-package="some.external.package">
</context:component-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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文