方式一
直接xml 注入 不举例了
方式二
配合包扫描@ComponentScan 使用@Controller @Service @Component 等方式注入 可以使用excludeFilters 排除扫描包下某些类
注意 在springboot应用下 默认扫描包位置 springboot启动类所在包及其子包
像图示这种情况下 F H这两个类 都被我加了 @Component 他们也在包扫描下的位置下 如果使用excludeFilters 可以排除某个类进容器
方式三
配合@Import 值为某个类
例如
@Import({A.class}) A这个类不用任何注解 就可加入容器中
方式四
配合@Import @Import({B.class}) 值为某个类 这个类实现ImportSelector 注意这个类不会注入到容器中 但是B1会注入到容器中
//若实现了此接口 则这个类不会呗注入到容器中 配合@Import注解使用
public class B implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
//annotationMetadata 为@import所在那个类的注解
return new String[]{"com.pps.back.frame.pupansheng.entity.B1"};
}
}
方式五
配合@Import @Import({C.class}) 值为某个类 这个类实现ImportBeanDefinitionRegistrar 注意这个类不会注入到容器中 但是C1会注入到容器中 并且这种方式可以得知容器其他的类
public class C implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
Arrays.stream(beanDefinitionRegistry.getBeanDefinitionNames()).forEach(System.out::println);
RootBeanDefinition beanDefinition=new RootBeanDefinition(C1.class) ;
beanDefinitionRegistry.registerBeanDefinition("pps",beanDefinition);
}
}
方式六
保证某个类可以注入到容器中 这个类实现 FactoryBean 接口 那么 容器中不仅有这个类 还有其接口实现返回的类
// 用容器的getBean(&+name) 可以得到具体类 不加& 得到是工厂类 当然可以直接使用@Autowired注解到容器中
如下:容器中不仅有 DBeanFactory 还有DB
@Configuration
public class DBeanFactory implements FactoryBean {
@Override
public Object getObject() throws Exception {
return new DB();
}
@Override
public Class<?> getObjectType() {
return DB.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
方式七(springboot环境)
使用@EnableConfigurationProperties 加上 @ConfigurationProperties(要注入的类) 即可注入 (自动配置常用到) 不举例了