通过@CompentScan +@Controller @Service @Respository @compent
适用场景: 针对我们自己写的组件可以通过该方式来进行加载到容器中。
通过@Bean的方式来导入组件(适用于导入第三方组件的类)
通过@Import来导入组件 (导入组件的id为全类名路径)
@Configuration
@Import(value = {Person.class, Car.class})
public class MainConfig {
}
通过@Import 的ImportSeletor类实现组件的导入 (导入组件的id为全类名路径)
public class CustomImportSelector implements ImportSelector {
/可以获取导入类的注解信息
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.Custom.testimport.compent.Dog"};
}
}
@Configuration
@Import(value = {Person.class, Car.class, CustomImportSelector.class})
public class MainConfig {
}
通过@Import的 ImportBeanDefinitionRegister导入组件 (可以指定bean的名称)
public class CustomBeanDefinitionRegister implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
//创建一个bean定义对象
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Cat.class);
//把bean定义对象导入到容器中
registry.registerBeanDefinition("cat",rootBeanDefinition);
}
}
@Configuration
//@Import(value = {Person.class, Car.class})
//@Import(value = {Person.class, Car.class, CustomImportSelector.class})
@Import(value = {Person.class, Car.class, CustomImportSelector.class, CustomBeanDefinitionRegister.class})
public class MainConfig {
}
通过实现FacotryBean接口来实现注册 组件
package com.leon.testfactorybean;
import org.springframework.beans.factory.FactoryBean;
/**
* 通过实现factoryBean接口往容器中注册组件
*/
public class CarFactoryBean implements FactoryBean<Car> {
@Override
public Car getObject() throws Exception {
return new Car();
}
@Override
public Class<?> getObjectType() {
return Car.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
package com.leon.testfactorybean;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainClass {
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
Object bean = ctx.getBean("carFactoryBean");
System.out.println(bean);
/* Object bean2 = ctx.getBean("&carFactoryBean");
System.out.println(bean2);*/
}
}