SpringBoot 2 @Configuration、@Import

142 阅读1分钟

@Configuration注解的作用是替代原始 spring配置文件 功能

编写配置类

import com.kenny.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 1、@Configuration 替代 spring配置文件(配置bean)
 * 2、组件源码中包含 @Component 注解,当前类也会注册到 IOC 容器,默认类名小写
 * 3、默认都是单例的
 */
@Configuration
public class MyConfig {
    @Bean
    public User getUser() {
        return new User();
    }
}

使用@Import导入的类会被Spring加载到IOC容器中

@Import提供4中用法:

  1. 导入Bean
  2. 导入配置类
  3. 导入 ImportSelector 实现类。一般用于加载配置文件中的类
  4. 导入 ImportBeanDefinitionRegistrar 实现类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Import;

import java.util.Map;

@SpringBootApplication
@Import(User.class)  
//会自动执行当前类的构造方法创建对象,存到IOC容器, bean名称为:类的全路径

public class DataApplication {
  public static void main(String[] args) {
    ConfigurableApplicationContext applicationContext = SpringApplication.run(DataApplication.class, args);

    Map<String, User> map = applicationContext.getBeansOfType(User.class);
    System.out.println(map);
    
    User user1 = applicationContext.getBean("com.kenny.pojo.User", User.class);
    System.out.println(user1);

  }
}
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Import;

import java.util.Map;

@SpringBootApplication
//1、会自动执行当前类的构造方法创建对象,存到IOC容器, bean名称为:类的全路径

@Import(MyConfig.class)
//2、创建MyConfig bean,并且类中有 带有@Bean注解方法,创建对象存到IOC容器,bean名称为:默认方法名称
public class DataApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(DataApplication.class, args);

        Map<String, User> map = applicationContext.getBeansOfType(User.class);
        System.out.println(map);

        User user1 = applicationContext.getBean("getUser", User.class);
        System.out.println(user1);

        Map<String, MyConfig> config = applicationContext.getBeansOfType(MyConfig.class);
        System.out.println(config);
    }
}