【问题标题】:How to inject Autowired beans inside XML configuration?如何在 XML 配置中注入 Autowired bean?
【发布时间】:2019-11-27 14:35:06
【问题描述】:

我的 Dao 和 DaoImpl 类如下:

public interface MyDao{
}
@Service(value = "MyDao")
public class MyDaoImpl implements MyDao{
}

我需要将 MyDaoImpl 注入到 Driver.java 类中的变量 myDao

public class Driver{
   MyDao myDao;
   public MyDao getMyDao() {
        return myDao;
   }
   public void setMyDao(MyDao myDao) {
        this.myDao = myDao;
   }
}

现在的问题是我正在使用类似这样的 XML 创建 bean:

<bean id="driver123" class="com.Driver">
</bean>

如何使用 XML 在此 bean 中注入 MyDaoImpl 对象(通过 Annotation 创建)? 如果 MyDaoImpl 是通过 XML 创建的,我可以使用属性和 ref config。

但是我该怎么做呢?

【问题讨论】:

  • 我可以使用属性和 ref config 你仍然可以这样做。 bean 的名称是 ApiInboundManager
  • @SotiriosDelimanolis 你能提供一些代码吗?
  • 只要您的 XML 或注释配置以一种或另一种方式导入,&lt;property name="myDao" ref="ApiInboundManager" /&gt;
  • 你可以试试这个。 &lt;bean id="driver123" class="com.Driver"&gt; &lt;property name="myDao" ref="MyDao"&gt;&lt;/property&gt; &lt;/bean&gt;
  • 试过了。我在尝试获取 cfg.getApplicationContext().getBean(beanId) 行中的 bean 时遇到异常原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为“MyDao”的 bean 可用

标签: java xml spring annotations


【解决方案1】:

首先你像这样为配置创建配置类

package com.example.amer.config;

import com.example.amer.dao.MyDaoImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Config {

    @Bean(name = "myDaoImpl")
    public MyDaoImpl myDaoImpl()
    {
        MyDaoImpl myDao = new MyDaoImpl();
        return myDao;
    }
}

我们在这里创建 MyDaoImpl Bean

和MyDao界面

package com.example.amer.dao;

public interface MyDao {

    public String getUserByName();
}

和驱动类

package com.example.amer;

import com.example.amer.dao.MyDao;

public class Driver {
    MyDao myDao;

    public MyDao getMyDao() {
        return myDao;
    }

    public void setMyDao(MyDao myDao) {
        this.myDao = myDao;
    }

}

接下来我将像这样创建 xml bean

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- Scan the JavaConfig -->
    <context:component-scan base-package="com.example.amer.config" />

    <bean id="driver" class="com.example.amer.Driver">
        <property name="myDao" ref="myDaoImpl"></property>
    </bean>

</beans>

我们在 xml 中扫描包含 MyDao Impl 的 Java 配置 我创建 Driver bean 并定义到 myDao 属性然后我引用 MyDaoImpl bean,它的名称在 @Bean(name="myDaoImpl") 中定义

所以它会工作。

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多