zoukankan      html  css  js  c++  java
  • IOC 容器中添加组件的方式

    1、通过@CompentScan +@Controller @Service @Respository @compent

    适用场景: 针对我们自己写的组件可以通过该方式来进行加载到容器中。
     
    2、通过@Bean的方式来导入组件(适用于导入第三方组件的类)
     
    3、通过@Import来导入组件
    3.1、导入类
    @Configuration @Import(value = {Person.class, Car.class}) 
    public class MainConfig { }

    3.2、导入ImportSeletor类实现组件

    public class MyImportSelector implements ImportSelector { 
    //可以获取导入类的注解信息 
      @Override 
      public String[] selectImports(AnnotationMetadata importingClassMetadata) {
    return new String[]{"com.my.testimport.compent.Car"};
    }
    }

    @Configuration @Import(value
    = {Person.class, Car.class, MyImportSelector.class})
    public class MainConfig { }

    springboot的自动注入就是用了这种方式

    3.3、导入 ImportBeanDefinitionRegister类的实现组件

    public class MyBeanDefinitionRegister 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, MyImportSelector.class, MyBeanDefinitionRegister.class}) 
    public class MainConfig { }

    aop的实现注册类AutoProxyRegistrar就是实现了ImportBeanDefinitionRegister类

     4、通过实现FacotryBean接口来实现注册组件

    @Component
    public
    class CarFactoryBean implements FactoryBean<Car> { //返回bean的对象 @Override public Car getObject() throws Exception { return new Car(); } //返回bean的类型 @Override public Class<?> getObjectType() { return Car.class; } //是否为单利 @Override public boolean isSingleton() { return true; } }

     spring获取对象是返回的是getObject方法返回的对象,要想返回fanctoryBean对象,需要在获取对象名前加上&符号

    即 getBean("carFactoryBean" )返回car对象,

        getBean("&carFactoryBean" )返回CarFactoryBean 对象

  • 相关阅读:
    MyBatis-Generator 最佳实践
    Http请求工具
    多线程编程-之并发编程:阻塞队列
    如数据不存在就插入,存在就更新
    MySQL触发器
    13.multi_match实现dis_max+tie_breaker
    12. tie_breaker的使用原因和使用方法
    11.best fields策略(dis_max参数设置)
    10.多shard场景下relevence score可能不准确
    9.boost权重控制
  • 原文地址:https://www.cnblogs.com/pjfmeng/p/13947033.html
Copyright © 2011-2022 走看看