spring getBean
几种例子
1.
ApplicationContext appContext = new ClassPathXmlApplicationContext( "applicationContext.xml"); UserManager userManager = appContext.getBean(UserManager.class); userManager.addUser();
2.
public static void main(String[] args) { ClassPathResource resource = new ClassPathResource("applicationContext1.xml"); XmlBeanFactory factory = new XmlBeanFactory(resource); UserManager userManager = factory.getBean(UserManager.class); userManager.addUser(); }
3.
public static void main(String[] args) { DefaultListableBeanFactory factory = new DefaultListableBeanFactory();// 构造工厂 XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);// 新增Xml阅读器 reader.loadBeanDefinitions(new ClassPathResource( "applicationContext1.xml"));// 规则注册入容 UserManager userManager = factory.getBean(UserManager.class); userManager.addUser(); }
4. 测试registerSingleton
class myBean{ String a; public String getA() { return a; } public void setA(String a) { this.a = a; } void print(){ System.out.println("a = "+a); } } public class TestGetBean { public static void main(String[] args) { DefaultListableBeanFactory factory = new DefaultListableBeanFactory();// 构造工厂 XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);// 新增Xml阅读器 reader.loadBeanDefinitions(new ClassPathResource( "applicationContext1.xml"));// 规则注册入容 myBean bean = new myBean(); bean.setA("haha"); ((DefaultSingletonBeanRegistry) factory).registerSingleton("Test",bean); myBean bean1 = (myBean)factory.getBean("Test"); bean1.print(); } }
5.测试 registerBeanDefinition
public static void main(String[] args) { DefaultListableBeanFactory factory = new DefaultListableBeanFactory();// 构造工厂 XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);// 新增Xml阅读器 reader.loadBeanDefinitions(new ClassPathResource( "applicationContext1.xml"));// 规则注册入容 BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder .genericBeanDefinition(myBean.class); beanDefinitionBuilder .addPropertyValue("a", "hahaha"); factory.registerBeanDefinition("MyBean", beanDefinitionBuilder.getRawBeanDefinition()); myBean bean1 = (myBean)factory.getBean("MyBean"); bean1.print(); }
//已全结
参考 http://blog.csdn.net/buyaore_wo/article/details/8119577?utm_source=tuicool&utm_medium=referral
6. registerBeanDefinition 与getBean
else { this.beanDefinitionNames.add(beanName); this.manualSingletonNames.remove(beanName); this.frozenBeanDefinitionNames = null; } this.beanDefinitionMap.put(beanName, beanDefinition);
DefaultListableBeanFactory里的相关成员变量,获取 factory中已经注册的bean,可以打印 toString()
/** Map of bean definition objects, keyed by bean name 所有 */ private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(64); /** Map of singleton and non-singleton bean names, keyed by dependency type */ private final Map<Class<?>, String[]> allBeanNamesByType = new ConcurrentHashMap<Class<?>, String[]>(64); /** Map of singleton-only bean names, keyed by dependency type */ private final Map<Class<?>, String[]> singletonBeanNamesByType = new ConcurrentHashMap<Class<?>, String[]>(64); /** List of bean definition names, in registration order 所有注册的bean,按注册的顺序*/ private final List<String> beanDefinitionNames = new ArrayList<String>(64); /** List of names of manually registered singletons, in registration order */ private final Set<String> manualSingletonNames = new LinkedHashSet<String>(16);
打印toString()
ApplicationContext appContext = new ClassPathXmlApplicationContext( "applicationContext.xml"); String str =appContext.getAutowireCapableBeanFactory().toString(); System.out.println(str);
浙公网安备 33010602011771号