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);

 

posted @ 2017-03-13 16:23  cnchengv  阅读(174)  评论(0)    收藏  举报