zoukankan      html  css  js  c++  java
  • 2019.6.29 Spring注解-Bean的注册

    6.29

    • 向容器中注入组件的几种方式:

      • @Controller、@Service、@Respority、@Component

      • @Bean

      • @Import,接受class数组,组件名是数组内class的全类名

        • 注解中的那些类也可以是ImportSelector接口的实现类,需要实现一个selectImports方法,这个方法的返回值是一个要注解类的全类名(String[])数组

        • 注解中的类也可以是ImportBeanDefinationRegistrar接口的实现类,需要实现registerBeanDefinations方法,这个方法的形参是AnnotationMetadata(当前类的注册信息)和BeanDefinationRegistry(BeanDefination注册类)。BeanDefinationRegister对象的registerBeanDefination方法可以将bean注册,该方法除了需要注解bean的id,还需要BeanDefination对象,这个对象是对注解类的包装,可以使用这个类的有参构造器(参数就是要注解的类)来进行初始化

          public class My implements ImportBeanDefinitionRegistrar {
          
              @Override
              public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
                  BeanDefinition b = new RootBeanDefinition(Color.class);
                  beanDefinitionRegistry.registerBeanDefinition("color",b);
              }
          }
          
      • BeanFactory(工厂Bean)

        • 类实现FactoryBean接口,需要一个类的泛型,这个类就是注入的bean

        • 在配置类里面用@Bean的方式去注入这个FactoryBean的实现类,

        • 注意:容器中注入的Bean的id是方法名,但是实际注入的Bean的类型是这个工厂Bean的泛型

        • 如果需要获取这个工厂Bean,需要在GetBean方法的形参内添加“&”

          public class MyColorFactory implements FactoryBean<Color> {
              @Override
              public Color getObject() throws Exception {
                  return new Color();
              }
          
              @Override
              public Class<?> getObjectType() {
                  return Color.class;
              }
          
              @Override
              public boolean isSingleton() {
                  return false;
              }
          }
          
          
          Object getcolor = applicationContext.getBean("&getcolor");
          
    • Bean生命周期:创建、初始化、销毁。

      • 初始化和销毁的方式分别是在原来xml配置的方式中是通过<Bean>标签的init-method、destroy-method来指定对应方法的。方法不能有参数,但可以抛异常。
      • 也可以通过@Bean注解的init-method、destroy-method来制定对应的方法。
      • 注意:多实例模式下,当执行ApplicationContext.close()方法时,容器不会调用销毁方法。需要自己手动调用。
    • 将需要注入的Bean手动实现InitializingBean和DisposableBean接口来实现。

    • 使用JSR250中的@PostConstruct(Bean属性配置完成)和@PreDestroy(注解到相应的方法)(销毁容器之前调用)来实现

  • 相关阅读:
    React的环境搭建
    Maven学习(3)-依赖管理-项目依赖相关操作命令
    k8s的yaml文件配置详解(转))
    Jenkins学习-Jenkins+K8s(k8s部署)
    Jenkins学习-定时任务设置(转)
    IntelliJ IDEA+Github+Maven+Jenkins+SipringBoot+VUE搭建Web开发环境样例(3)-为查询数据库项目样例创建Jenkins构建任务
    Maven学习(3)-依赖管理-POM文件中依赖的范围定义
    Maven学习(3)-依赖管理-POM文件中依赖的版本锁定详解
    Maven学习(3)-依赖管理-POM文件中依赖的jar包下载过程详解
    Maven学习(3)-依赖管理-依赖仓库管理
  • 原文地址:https://www.cnblogs.com/mwss/p/11108948.html
Copyright © 2011-2022 走看看