Spring基于Java类配置Bean(四):通过@Configuration配置类引用xml配置信息

总结:

在@Configuration配置类中,通过@ImportResource就可以引入xml配置文件,在配置类中可直接通过@AutoWired引用xml文件中定义的bean。

(1)XML配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- <context:component-scan base-package="com.study.spring.bean.javaClassBean"/> -->
    <bean id = "userDao"  class = "com.study.spring.bean.javaClassBean.UserDao"/>

</beans>

(2)@Configuration配置类

package com.study.spring.bean.javaClassBean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ImportResource("classpath:conf/spring/spring-conf.xml") //(1)通过@ImportResource引入xml配置文件
public class SpringBeansConfig {

    @Bean
    @Autowired //(2)自动注入xml配置文件定义的Bean
    public UserService userService(UserDao userDao) {
        UserService userService = new UserService();
        userService.setUserDao(userDao);
        return userService;
    }
}

(3)UserService类

package com.study.spring.bean.javaClassBean;

import com.study.spring.interfaces.IUserService;
import java.util.List;

/**
 * 业务层
 */
public class UserService implements IUserService {

    private UserDao userDao;
    //要有set方法
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public List<User> queryUserList() {
        if (null != userDao) {
            return userDao.queryUserList();
        }
        return null;
    }
}

(4)测试类

package com.study.spring.bean.javaClassBean;

import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
//import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestJavaClassBean {

    public static void main(String[] args) {

        //方法一:AnnotationConfigApplicationContext类通过标注@Configuration的Java类启动Spring容器。
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringBeansConfig.class);
        UserService userService = context.getBean(UserService.class);

        //方法二:AnnotationConfigApplicationContext支持通过编码的方式加载多个@Configuration配置类,然后通过刷新容器因应用这些配置类。
        //AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        //注册一个活或多个@Configuration配置类
        //context.register(SpringBeansConfig.class);
        //继续注册@Configuration配置类
        //context.register(SpringConfig.class);
        //刷新容器以应用这些注册的配置类
        //context.refresh();

        //ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("conf/spring/spring-conf.xml");
        //UserDao userDao = (UserDao)context.getBean("userDaoTemp");
        //List<User> userList = userDao.queryUserList();
        //UserService userService = (UserService)context.getBean("userService");

        List<User> userList = userService.queryUserList();

        if (null != userList) {
            for (User user : userList) {
                System.out.println(user);
            }
        } else {
            System.out.println("userList is null...");
        }

        //context.destroy();
    }
}

(5)测试结果

信息: Loading XML bean definitions from class path resource [conf/spring/spring-conf.xml]
User [userName=userName1, password=password1, updateTime=1526433618543]
User [userName=userName2, password=password2, updateTime=1526433618543]
User [userName=userName3, password=password3, updateTime=1526433618543]
User [userName=userName4, password=password4, updateTime=1526433618543]
User [userName=userName5, password=password5, updateTime=1526433618543]

猜你喜欢

转载自blog.csdn.net/jingzi123456789/article/details/80332649