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