zoukankan      html  css  js  c++  java
  • spring 动态bean注册

    1、

    import org.springframework.beans.MutablePropertyValues;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.beans.factory.support.GenericBeanDefinition;
    
    import java.util.Date;
    
    /**
     * @author www.gomepay.com
     * @date 2019/11/14
     */
    public class GenericBeanDefinitionExample {
        public static void main (String[] args) {
            DefaultListableBeanFactory context = new DefaultListableBeanFactory();
    
            GenericBeanDefinition gbd = new GenericBeanDefinition();
            gbd.setBeanClass(MyBean.class);
    
            MutablePropertyValues mpv = new MutablePropertyValues();
            mpv.add("date", new Date());
    
            //alternatively we can use:
            // gbd.getPropertyValues().addPropertyValue("date", new Date());
            gbd.setPropertyValues(mpv);
    
            context.registerBeanDefinition("myBeanName", gbd);
    
            MyBean bean = context.getBean(MyBean.class);
            bean.doSomething();
        }
    }public class MyBean {
        private Date date;
    
        public void doSomething () {
            System.out.println("from my bean, date: " + date);
        }
    
        public void setDate (Date date) {
            this.date = date;
        }
    }

    输出:from my bean, date: Fri Nov 15 14:16:37 GMT+08:00 2019

    2、

    import org.springframework.beans.factory.support.BeanDefinitionBuilder;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    
    /**
     * @author www.gomepay.com
     * @date 2019/11/15
     */
    public class BeanDefinitionBuilderExample {
        public static void main (String[] args) {
            DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
            BeanDefinitionBuilder b =
                    BeanDefinitionBuilder.rootBeanDefinition(MyBean.class)
                            .addPropertyValue("str", "myStringValue");
            beanFactory.registerBeanDefinition("myBean", b.getBeanDefinition());
    
            MyBean bean = beanFactory.getBean(MyBean.class);
            bean.doSomething();
        }
    }
    public class MyBean {
        private String str;
    
        public void setStr (String str) {
            this.str = str;
        }
    
        public void doSomething () {
            System.out.println("from MyBean " + str);
        }
    }

    输出:from MyBean myStringValue

    3、

    import org.springframework.beans.MutablePropertyValues;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.beans.factory.support.GenericBeanDefinition;
    
    /**
     * @author www.gomepay.com
     * @date 2019/11/15
     */
    public class InjectingOtherBeans {
        public static void main(String[] args) {
            DefaultListableBeanFactory context = new DefaultListableBeanFactory();
            //define and register MyOtherBean
            GenericBeanDefinition beanOtherDef = new GenericBeanDefinition();
            beanOtherDef.setBeanClass(MyOtherBean.class);
            context.registerBeanDefinition("other", beanOtherDef);
    
            //definine and register myBean
            GenericBeanDefinition beanDef = new GenericBeanDefinition();
            beanDef.setBeanClass(MyBean.class);
            MutablePropertyValues mpv = new MutablePropertyValues();
            mpv.addPropertyValue("otherBean", context.getBean("other"));
            beanDef.setPropertyValues(mpv);
            context.registerBeanDefinition("myBean", beanDef);
    
            //using MyBean instance
            MyBean bean = context.getBean(MyBean.class);
            bean.doSomething();
        }
    }
    class MyBean {
        private MyOtherBean otherBean;
    
        public void setOtherBean (MyOtherBean otherBean) {
            this.otherBean = otherBean;
        }
    
        public void doSomething () {
            otherBean.doSomething();
        }
    }
    class MyOtherBean {
        public void doSomething () {
            System.out.println("from other bean ");
        }
    }

    输出:from other bean 

    4、

    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.beans.factory.support.GenericBeanDefinition;
    
    public class MyConfigBean implements BeanFactoryPostProcessor {
    
        @Override
        public void postProcessBeanFactory (
                ConfigurableListableBeanFactory beanFactory)
                throws BeansException {
            GenericBeanDefinition bd = new GenericBeanDefinition();
            bd.setBeanClass(MyBean.class);
            bd.getPropertyValues().add("strProp", "my string property");
            ((DefaultListableBeanFactory) beanFactory).registerBeanDefinition("myBeanName", bd);
        }
    }
    @Configuration
    class MyConfig {
        @Bean
        MyConfigBean myConfigBean () {
            return new MyConfigBean();
        }
    }
    class MyBean {
        private String strProp;
    
        public void setStrProp (String strProp) {
            this.strProp = strProp;
        }
    
        public void doSomething () {
            System.out.println("from MyBean:  " + strProp);
        }
    }
    public class BeanFactoryPostProcessorExample {
        public static void main (String[] args) {
            AnnotationConfigApplicationContext context =
                    new AnnotationConfigApplicationContext(MyConfig.class);
            MyBean bean = context.getBean(MyBean.class);
            bean.doSomething();
        }
    }

    输出:from MyBean:  my string property

    5、

    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
    import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
    import org.springframework.beans.factory.support.GenericBeanDefinition;
    
    public class MyConfigBean implements BeanDefinitionRegistryPostProcessor {
        @Override
        public void postProcessBeanDefinitionRegistry (BeanDefinitionRegistry registry)
                throws BeansException {
            GenericBeanDefinition bd = new GenericBeanDefinition();
            bd.setBeanClass(MyBean.class);
            bd.getPropertyValues().add("strProp", "my string property");
            registry.registerBeanDefinition("myBeanName", bd);
        }
        @Override
        public void postProcessBeanFactory (ConfigurableListableBeanFactory beanFactory)
                throws BeansException {
            //no op
        }
    }
    @Configuration
    public class MyConfig {
        @Bean
        MyConfigBean myConfigBean () {
            return new MyConfigBean();
        }
    }
    public class MyBean {
        private String strProp;
        public void setStrProp (String strProp) {
            this.strProp = strProp;
        }
        public void doSomething () {
            System.out.println("from MyBean:  " + strProp);
        }
    }
    public class BeanDefinitionRegistryPostProcessorExample {
        public static void main (String[] args) {
            AnnotationConfigApplicationContext context =
                    new AnnotationConfigApplicationContext(MyConfig.class);
            MyBean bean = (MyBean) context.getBean("myBeanName");
            bean.doSomething();
        }
    }

    输出:from MyBean:  my string property

  • 相关阅读:
    linux 运维 nginx服务器
    linux 运维,代理,acl控制访问
    shell脚本 awk工具
    shell脚本 sed工具
    shell脚本 字串截取 正则表达式
    Django ORM 反向查询
    Django model操作
    Form的is_valid校验规则及验证顺序
    Django 中的Form、ModelForm
    Django 中的Form表单认证
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/11866207.html
Copyright © 2011-2022 走看看