1.@Import注释导入bean
1.@Import(xxx.class)
2.通过Ioc容器context.getBean(xxx.class)获取bean
package com.example.demo;
import com.itheima.config.EnableUser;
import com.itheima.config.UserConfig;
import com.itheima.domain.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
import java.util.Map;
/**
* Import4种用法
* 1.导入Bean
*
*/
@SpringBootApplication
//@ComponentScan("com.itheima.config")
//@Import(UserConfig.class)
//@EnableUser
@Import(User.class)
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
// Object user = context.getBean("user");
// System.out.println(user);
//Import方式1获取Bean
User user = context.getBean(User.class);
System.out.println(user);
//获取包名和类名
Map<String, User> map = context.getBeansOfType(User.class);
System.out.println(map);
}
}
2.@Import注解导入配置类
配置类里有两个Bean
package com.itheima.config;
import com.itheima.domain.Role;
import com.itheima.domain.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration //使用Import注解时候可以不写这行
public class UserConfig {
@Bean
public User user(){
return new User();
}
@Bean
public Role role(){
return new Role();
}
}
1.Import注解导入配置类名称
@Imoprt(配置类.class)
之后再context.getBean(配置类.class)
package com.example.demo;
import com.itheima.config.EnableUser;
import com.itheima.config.UserConfig;
import com.itheima.domain.Role;
import com.itheima.domain.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
import java.util.Map;
/**
* Import4种用法
* 1.导入Bean
* 2.导入配置类
*/
@SpringBootApplication
//@ComponentScan("com.itheima.config")
//@Import(UserConfig.class)
//@EnableUser
//@Import(User.class)
@Import(UserConfig.class)
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
// Object user = context.getBean("user");
// System.out.println(user);
//Import方式1获取Bean
User user = context.getBean(User.class);
System.out.println(user);
Role role = context.getBean(Role.class);
System.out.println(role);
}
}
3.@Import导入ImportSelector实现类
1.ImportSelector实现类
重写selectImports方法
return那里的字符串数组是想要导入的bean
2.Import(接口实现类.class)
package com.itheima.config;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{"com.itheima.domain.User","com.itheima.domain.Role"};
}
}
package com.example.demo;
import com.itheima.config.EnableUser;
import com.itheima.config.MyImportSelector;
import com.itheima.config.UserConfig;
import com.itheima.domain.Role;
import com.itheima.domain.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
import java.util.Map;
/**
* Import4种用法
* 1.导入Bean
* 2.导入配置类
* 3.导入ImportSelector的实现类
*/
@SpringBootApplication
//@ComponentScan("com.itheima.config")
//@Import(UserConfig.class)
//@EnableUser
//@Import(User.class)
//@Import(UserConfig.class)
@Import(MyImportSelector.class)
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
// Object user = context.getBean("user");
// System.out.println(user);
//Import方式1获取Bean
User user = context.getBean(User.class);
System.out.println(user);
Role role = context.getBean(Role.class);
System.out.println(role);
}
}
4.@Import导入ImportBeanDefinitionRegistrar实现类
1.编写实现类
2.重写registerBeanDefinitions方法
3.registry.registerBeanDefinition("user",beanDefinition);参数1是名字,参数2需要通过
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDefinition();
获取
package com.itheima.config;
import com.itheima.domain.User;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) {
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDefinition();
registry.registerBeanDefinition("user",beanDefinition);
}
}
package com.example.demo;
import com.itheima.config.EnableUser;
import com.itheima.config.MyImportBeanDefinitionRegistrar;
import com.itheima.config.MyImportSelector;
import com.itheima.config.UserConfig;
import com.itheima.domain.Role;
import com.itheima.domain.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
import java.util.Map;
/**
* @ComponentScan 扫描范围:当前引导类所在包及其子包
*
* com.example.demo
* com.itheima.config
*
* 1.使用@ComponentScan扫描com.itheima.config包
* 2.可以使用@import注解,加载类。这些类都会被spring创建并放入IOC容器
* 3.可以对Import注解进行封装
*/
/**
* Import4种用法
* 1.导入Bean
* 2.导入配置类
* 3.导入ImportSelector的实现类
* 4.导入ImportBeanDefinitionRegistrar实现类
*/
@SpringBootApplication
//@ComponentScan("com.itheima.config")
//@Import(UserConfig.class)
//@EnableUser
//@Import(User.class)
//@Import(UserConfig.class)
//@Import(MyImportSelector.class)
@Import(MyImportBeanDefinitionRegistrar.class)
public class DemoApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
// Object user = context.getBean("user");
// System.out.println(user);
//Import方式1获取Bean
User user = context.getBean(User.class);
System.out.println(user);
//会报错,因为没有引入role
Role role = context.getBean(Role.class);
System.out.println(role);
// //获取包名和类名
// Map<String, User> map = context.getBeansOfType(User.class);
// System.out.println(map);
}
}