首页 > 解决方案 > 如何在 XML 配置中注入 Autowired bean?

问题描述

我的 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 创建的,我可以使用属性和参考配置。

但是我该怎么做呢?

标签: javaxmlspringannotations

解决方案


首先,您像这样为配置创建配置类

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") 中定义

所以它会起作用。


推荐阅读