@Import注解
@Enable底层依赖于@Import注解导入一些类,使用@Import导入的类会被Spring加载到IOC容器中,而@Import提供4种用法:
1.导入Bean
@Import(User.class)
获取user的代码:
User user = context.getBean(User.class);
sout(user)
Map<String,User> map = context.getBeansOfType(User.class);
sout(map);
2.导入配置类
@Import(UserConfig.class)
User user = context.getBean(User.class);
3.导入ImportSelector实现类,一般用于加载配置文件中的类
在..other工程下的com.itheima.config包下新建一个类:
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 importingClassMetadata) {
return new String[]{"com.itheima.domain.User", "com.itheima.domain.Role"};
}
}
在原工程下使用该注解:
@Import(MyImportSelector.class)
public class SpringEnableApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringEnableApplication.class, args);
//获取Bean
Object user = context.getBean(User.class);
System.out.println(user);
}
}
4.导入ImportBeanDefinitionRegistrar实现类
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.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDefinition();
registry.registerBeanDefinition("user", beanDefinition);
}
}
@Import({MyImportBeanDefinitionRegistrar.class})
public class SpringEnableApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringEnableApplication.class, args);
//获取Bean
//Object user = context.getBean(User.class);
//System.out.println(user);
Object user = context.getBean("user");
System.out.println(user);
}
}