Springboot-ImportResourc原生配置文件引入

Springboot-ImportResourc原生配置文件引入

@ImportResource-原生配置文件引入
若要按照之前的方式在xml里面写组件,引入时需要在配置类中使用@ImportResource。如:

1、写原生配置文件。如:

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

    <bean id="haha" class="com.example.bean.User">
        <property name="name" value="zhangsan"></property>
        <property name="age" value="18"></property>
    </bean>

    <bean id="hehe" class="com.example.bean.Pet">
        <property name="name" value="tomcat"></property>
    </bean>

</beans>

2、在配置类中引入。如:

package com.example.config;

import ch.qos.logback.core.db.DBHelper;
import com.example.bean.Pet;
import com.example.bean.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;

/**
 *  5、@ImportResource("classpath:beans.xml")导入Spring的配置文件
 */
@ImportResource("classpath:beans.xml")
@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = true) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {

    /**
     * 外部无论对配置类中的这个组件注册方法调用多少次,获取的都是之前注册容器中的单实例对象
     * @return
     */
  @ConditionalOnBean(name="tom") //当有tom这个组件时再创建user01组件,如若没有,则不进行创建;若放在上面,即public class MyConfig{上面,则若有该名字的组件,则创建以下所有组件,若无,则下面所有组件都不进行创建
  @Bean //给容器中添加组件,以方法名作为组件的id,返回类型就是组件类型,返回的值就是组件在容器中的实例
//    public User user01(){
//        return new User("zhangsan",18);
//    }

    public User user01(){
        User zhangsan=new User("zhangsan",18);
        //User组件依赖了Pet组件
        zhangsan.setPet( tomcatPet());
        return zhangsan;
    }

    //@Bean("tom") //若不想以方法名作为组件id,可以在@Bean()中添加想要设置的组件id
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}

3、在主文件类中测试,是否原生配置文件中的组件已引入。如:

package com.example;

import ch.qos.logback.core.db.DBHelper;
import com.example.bean.Pet;
import com.example.bean.User;
import com.example.config.MyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication //这是一个SpringBoot应用
public class MainApplication { //主程序类,主配置类
    public static void main(String[] args) {
        //SpringApplication.run(MainApplication.class,args);

        //1、返回我们IOC容器
        ConfigurableApplicationContext run=SpringApplication.run(MainApplication.class,args);

        //2、查看容器里面的组件
        String[] names=run.getBeanDefinitionNames();
        for(String name:names){
            System.out.println(name);
        }

        //判断容器中是否有命名为此(如:tom和user01)的组件

        boolean hehe=run.containsBean("hehe");
        System.out.println("配置文件中的hehe组件:"+hehe);

        boolean haha=run.containsBean("haha");
        System.out.println("配置文件中的haha组件:"+haha);
    }
}

版权声明:本文为qq_42250642原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。