【spring使用第七篇】Import注解

先建三个@Component

@Component
public class A{
}
@Component
public class B{
}
@Component
public class C{
}

再建三个@Configuration

@Configuration
public class AConfig {

	@Bean(name="a")
	public A a(){
		return new A();
	}
}
@Configuration
public class BConfig {

	@Bean(name="b")
	public B b(){
		return new B();
	}
}
@Configuration
public class CConfig {

	@Bean(name="c")
	public C c(){
		return new C();
	}
}

Import出场

先建三个@Component

@Component
public class A{
}
@Component
public class B{
}
@Component
public class C{
}

再建三个@Configuration

@Configuration
public class AConfig {

	@Bean(name="a")
	public A a(){
		return new A();
	}
}
@Configuration
public class BConfig {

	@Bean(name="b")
	public B b(){
		return new B();
	}
}
@Configuration
public class CConfig {

	@Bean(name="c")
	public C c(){
		return new C();
	}
}

1.普通方式

Import出场

@Configuration
@Import({AConfig.class, BConfig.class, CConfig.class})
public class TotalConfig {

}

类似三个子配置,这里弄了个总配置,比较像之前xml配置文件形式,总的配置文件import几个子配置文件,放一起比较乱

2 ImportSelector接口方式

public class ABCSelector implements  ImportSelector{

	@Override
	public String[] selectImports(AnnotationMetadata importingClassMetadata) {
		
		    return new String[]{"com.spring.config.AConfig","com.spring.config.BConfig",,"com.spring.config.CConfig"};
	}

}
@Configuration
@Import(ABCSelector.class)
public class TotalConfig {

}

3 ImportBeanDefinitionRegistrar接口方式

public class ABCImportBeanDefinitionRegistrar  implements  ImportBeanDefinitionRegistrar{

    @OverrideA
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry) {
        RootBeanDefinition rootBeanDefinitionA = new RootBeanDefinition(A.class);
        registry.registerBeanDefinition("a123",rootBeanDefinitionA);//自定义注册beana
        
        RootBeanDefinition rootBeanDefinitionB = new RootBeanDefinition(B.class);
        registry.registerBeanDefinition("b123",rootBeanDefinitionA);//自定义注册beanb
        
        RootBeanDefinition rootBeanDefinitionC = new RootBeanDefinition(C.class);
        registry.registerBeanDefinition("c123",rootBeanDefinitionA);//自定义注册beanc
    }


}
@Configuration
@Import(TestImportBeanDefinitionRegistrar.class)
public class TotalConfig {

}

4.区别

三种用法方式都可在一个@Import中使用,需要注意的是第一种、第二种方式在IOC容器中bean名称是类的全类名,而第三种方式是自定义的名称。

@Import({{AConfig.class, BConfig.class, CConfig.class,ABCSelector.class,ABCImportBeanDefinitionRegistrar.class}})
@Configuration
public class TotalConfig {}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值