006---@Import注解 直接导入组件、使用ImportSelector接口 和 使用 ImportBeanDefinitionRegistrar接口 的三种@Import方式(方式三)
导入组件的方法有方式一:自己编写的类 加入了@Controller、@Service、@Repository、@Component注解的类方式二:通过@Bean注解导入第三方类方式三:通过@Import直接导入第三方类(默认在Ioc容器内的名称就是全类名(包名+类名))示例:@Import的使用方式一组件:下面的构造方法我加入了一条输出语句package bean;...
·
导入组件的方法有
方式一:自己编写的类 加入了@Controller、@Service、@Repository、@Component注解的类
方式二:通过@Bean注解导入第三方类
方式三:通过@Import直接导入第三方类(默认在Ioc容器内的名称就是全类名(包名+类名))
示例:
@Import的使用方式一
组件:下面的构造方法我加入了一条输出语句
package bean;
public class HelloWorld {
String hello="Hello demo";
public HelloWorld() {
super();
System.out.println("导入成功");
}
@Override
public String toString() {
return "HelloWorld{" +
"hello='" + hello + '\'' +
'}';
}
}
spring配置类,原先通过@Bean注解导入现在直接通过@Import导入,如果输出了上面的那条“导入成功”说明导入了IOC容器中
package config;
import bean.HelloWorld;
import org.springframework.context.annotation.*;
@Configuration
@Import(HelloWorld.class)
public class Config {
// @Scope("prototype")
// @Conditional({DemoCondition.class})
// @Bean("hello")
// public HelloWorld hello() {
// System.out.println("bean加入ioc容器");
// return new HelloWorld();
// }
}
测试类
package config;
import bean.HelloWorld;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import static org.junit.Assert.*;
public class ConfigTest {
@Test
public void test1(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);
}
}
运行结果:
@Import注解的使用方式二
实现ImportSelector接口,
package config;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
public class DemoImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{"全类名组件1","全类名组件2"};
}
}
使用方式和前面差不多:
@Import({HelloWorld.class,DemoImportSelector.class})
其中组件的全类名要记得修改!替换其中的中文
@Import的使用方式三,实现ImportBeanDefinitionRegistrar接口
package config;
import bean.HelloWorld;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
public class DemoImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
boolean b1 = beanDefinitionRegistry.containsBeanDefinition("IOC容器中的组件名1");
boolean b2 = beanDefinitionRegistry.containsBeanDefinition("IOC容器中的组件名2");
if (b1 && b2){
//组件1和组件2都存在则添加新组件
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(HelloWorld.class);
beanDefinitionRegistry.registerBeanDefinition("HelloWorld",rootBeanDefinition);
}
}
}
使用方式和前面import一样
@Import({HelloWorld.class,DemoImportBeanDefinitionRegistrar.class})
更多推荐
已为社区贡献24条内容
所有评论(0)