给容器中注册组件的几种方式(三)

接上篇:

三: @Import(value=""):快速的给容器导入一个组件

    1:value:要导入到容器中的组件(例如@Import(自定义.类)

    2:实现ImportSelector接口(myImportSelector.java):返回需要导入的组件的全类名数组:常用

myImportSelector.java:

   public class myImportSelector implements ImportSelector {

//AnnotationMetadata:可以获取当前标注@Import注解类的所有注解信息(比如@Conditional)

      @Override

      public String[]

selectImports(AnnotationMetadata importingClassMetadata) {

             // TODO Auto-generated method stub

             return new

String[]{“com.lh.service.UserService”,“com.lh.po.user”};

      }

   }

   3:实现ImportBeanDefinitionRegistrar接口(myImportBeanDefinitionRegistrar.java):

myImportBeanDefinitionRegistrar.java

   public class myImportBeanDefinitionRegistrar implements

ImportBeanDefinitionRegistrar {

   //AnnotationMetadata:当前标注@Import的类的所有注解信息

   //BeanDefinitionRegistry:BeanDefinition注册类

   //获取到所有注册类,通过BeanDefinitionRegistry.registerBeanDefinition方法手动注册

   @Override

   public void

registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
BeanDefinitionRegistry registry) {

          //registry.containsBeanDefinition:判断当前容器中是否存在这个bean

          boolean

containsBeanDefinition = registry.containsBeanDefinition(“userDao”);

          if(containsBeanDefinition)

{

                 //RootBeanDefinition:自定义bean,要注册的bean(可以传入bean的类名,直接传入名称等等)

                 RootBeanDefinition

rootBeanDefinition = new RootBeanDefinition(RootBean.class);

                 //指定bean名,这个名称就是注册的bean的name名称

                 registry.registerBeanDefinition("RootBean",

rootBeanDefinition);

          }

   }

}

   4:使用spring提供的FactoryBean(工厂):也是实现这个接口:myFactoryBean.java

myFactoryBean.java:

   package com.lh.util;

import org.springframework.beans.factory.FactoryBean;

import com.lh.po.Factory;

//创建一个Spring定义的FactoryBean

public class myFactoryBean implements
FactoryBean {

   //返回一个Factory对象,这个对象会添加到容器中

   

   //获取到这个factory对象的方法:getObject

   @Override

   public

Factory getObject() throws Exception {

          //

TODO Auto-generated method stub

          System.out.println("容器被创建:Factory");

          return

new Factory();

   }

   

   //获取这个factory对象的类型:getObjectType

   @Override

   public

Class<?> getObjectType() {

          //

TODO Auto-generated method stub

          return

Factory.class;

   }



   //是否为单实例:isSingleton

   //返回true:表示这个bean是单实例,在容器中只会保留一份

   //返回false:表示这个bean是多实例,每次获取都会创建一个新的bean保留到容器中:调用getObject()来创建;

   @Override

   public

boolean isSingleton() {

          //

TODO Auto-generated method stub

          return

true;

   }

}

猜你喜欢

转载自blog.csdn.net/weixin_44543131/article/details/108842401