org.springframework.beans.factory.support.RootBeanDefinition#setFactoryBeanName ( )源码实例Demo

下面列出了org.springframework.beans.factory.support.RootBeanDefinition#setFactoryBeanName ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: learnjavabug   文件: SpringUtil.java
public static BeanFactory makeMethodTrigger(Object o, String method) throws Exception {
  DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
  RootBeanDefinition caller = new RootBeanDefinition();

  caller.setFactoryBeanName("obj");
  caller.setFactoryMethodName(method);
  Reflections.setFieldValue(caller.getMethodOverrides(), "overrides", new HashSet<>());
  bf.registerBeanDefinition("caller", caller);

  Reflections.getField(DefaultListableBeanFactory.class, "beanClassLoader").set(bf, null);
  Reflections.getField(DefaultListableBeanFactory.class, "alreadyCreated")
      .set(bf, new HashSet<>());
  Reflections.getField(DefaultListableBeanFactory.class, "singletonsCurrentlyInCreation")
      .set(bf, new HashSet<>());
  Reflections.getField(DefaultListableBeanFactory.class, "inCreationCheckExclusions")
      .set(bf, new HashSet<>());
  Reflections.getField(DefaultListableBeanFactory.class, "logger").set(bf, new NoOpLog());
  Reflections.getField(DefaultListableBeanFactory.class, "prototypesCurrentlyInCreation")
      .set(bf, new ThreadLocal<>());

  @SuppressWarnings("unchecked")
  Map<String, Object> objs = (Map<String, Object>) Reflections
      .getFieldValue(bf, "singletonObjects");
  objs.put("obj", o);
  return bf;
}
 
源代码2 项目: marshalsec   文件: SpringUtil.java
public static BeanFactory makeMethodTrigger ( Object o, String method ) throws Exception {
    DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
    RootBeanDefinition caller = new RootBeanDefinition();

    caller.setFactoryBeanName("obj");
    caller.setFactoryMethodName(method);
    Reflections.setFieldValue(caller.getMethodOverrides(), "overrides", new HashSet<>());
    bf.registerBeanDefinition("caller", caller);

    Reflections.getField(DefaultListableBeanFactory.class, "beanClassLoader").set(bf, null);
    Reflections.getField(DefaultListableBeanFactory.class, "alreadyCreated").set(bf, new HashSet<>());
    Reflections.getField(DefaultListableBeanFactory.class, "singletonsCurrentlyInCreation").set(bf, new HashSet<>());
    Reflections.getField(DefaultListableBeanFactory.class, "inCreationCheckExclusions").set(bf, new HashSet<>());
    Reflections.getField(DefaultListableBeanFactory.class, "logger").set(bf, new NoOpLog());
    Reflections.getField(DefaultListableBeanFactory.class, "prototypesCurrentlyInCreation").set(bf, new ThreadLocal<>());

    @SuppressWarnings ( "unchecked" )
    Map<String, Object> objs = (Map<String, Object>) Reflections.getFieldValue(bf, "singletonObjects");
    objs.put("obj", o);
    return bf;
}
 
private static void registerBindingTargetBeanDefinition(
		Class<? extends Annotation> qualifier, String qualifierValue, String name,
		String bindingTargetInterfaceBeanName,
		String bindingTargetInterfaceMethodName, BeanDefinitionRegistry registry) {

	if (registry.containsBeanDefinition(name)) {
		throw new BeanDefinitionStoreException(bindingTargetInterfaceBeanName, name,
				"bean definition with this name already exists - "
						+ registry.getBeanDefinition(name));
	}

	RootBeanDefinition rootBeanDefinition = new RootBeanDefinition();
	rootBeanDefinition.setFactoryBeanName(bindingTargetInterfaceBeanName);
	rootBeanDefinition.setUniqueFactoryMethodName(bindingTargetInterfaceMethodName);
	rootBeanDefinition
			.addQualifier(new AutowireCandidateQualifier(qualifier, qualifierValue));
	registry.registerBeanDefinition(name, rootBeanDefinition);
}
 
@Test
public void testWithFactoryBean() {
	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	RootBeanDefinition beanDef = new RootBeanDefinition(RequiredTestBean.class);
	beanDef.setFactoryBeanName("testBeanFactory");
	beanDef.setFactoryMethodName("create");
	factory.registerBeanDefinition("testBean", beanDef);
	factory.registerBeanDefinition("testBeanFactory", new RootBeanDefinition(RequiredTestBeanFactory.class));
	RequiredAnnotationBeanPostProcessor bpp = new RequiredAnnotationBeanPostProcessor();
	bpp.setBeanFactory(factory);
	factory.addBeanPostProcessor(bpp);
	factory.preInstantiateSingletons();
}
 
@Test
public void testNonStaticFactoryMethodFoundByNonEagerTypeMatching() {
	DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
	RootBeanDefinition factoryBd = new RootBeanDefinition(TestBeanFactory.class);
	lbf.registerBeanDefinition("factory", factoryBd);
	RootBeanDefinition rbd = new RootBeanDefinition(TestBeanFactory.class);
	rbd.setFactoryBeanName("factory");
	rbd.setFactoryMethodName("createTestBeanNonStatic");
	lbf.registerBeanDefinition("x1", rbd);

	TestBeanFactory.initialized = false;
	String[] beanNames = lbf.getBeanNamesForType(TestBean.class, true, false);
	assertEquals(1, beanNames.length);
	assertEquals("x1", beanNames[0]);
	assertFalse(lbf.containsSingleton("x1"));
	assertTrue(lbf.containsBean("x1"));
	assertFalse(lbf.containsBean("&x1"));
	assertTrue(lbf.isSingleton("x1"));
	assertFalse(lbf.isSingleton("&x1"));
	assertFalse(lbf.isPrototype("x1"));
	assertFalse(lbf.isPrototype("&x1"));
	assertTrue(lbf.isTypeMatch("x1", TestBean.class));
	assertFalse(lbf.isTypeMatch("&x1", TestBean.class));
	assertEquals(TestBean.class, lbf.getType("x1"));
	assertEquals(null, lbf.getType("&x1"));
	assertFalse(TestBeanFactory.initialized);
}
 
@Test
public void testWithFactoryBean() {
	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	RootBeanDefinition beanDef = new RootBeanDefinition(RequiredTestBean.class);
	beanDef.setFactoryBeanName("testBeanFactory");
	beanDef.setFactoryMethodName("create");
	factory.registerBeanDefinition("testBean", beanDef);
	factory.registerBeanDefinition("testBeanFactory", new RootBeanDefinition(RequiredTestBeanFactory.class));
	RequiredAnnotationBeanPostProcessor bpp = new RequiredAnnotationBeanPostProcessor();
	bpp.setBeanFactory(factory);
	factory.addBeanPostProcessor(bpp);
	factory.preInstantiateSingletons();
}
 
@Test
public void testNonStaticFactoryMethodFoundByNonEagerTypeMatching() {
	DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
	RootBeanDefinition factoryBd = new RootBeanDefinition(TestBeanFactory.class);
	lbf.registerBeanDefinition("factory", factoryBd);
	RootBeanDefinition rbd = new RootBeanDefinition(TestBeanFactory.class);
	rbd.setFactoryBeanName("factory");
	rbd.setFactoryMethodName("createTestBeanNonStatic");
	lbf.registerBeanDefinition("x1", rbd);

	TestBeanFactory.initialized = false;
	String[] beanNames = lbf.getBeanNamesForType(TestBean.class, true, false);
	assertEquals(1, beanNames.length);
	assertEquals("x1", beanNames[0]);
	assertFalse(lbf.containsSingleton("x1"));
	assertTrue(lbf.containsBean("x1"));
	assertFalse(lbf.containsBean("&x1"));
	assertTrue(lbf.isSingleton("x1"));
	assertFalse(lbf.isSingleton("&x1"));
	assertFalse(lbf.isPrototype("x1"));
	assertFalse(lbf.isPrototype("&x1"));
	assertTrue(lbf.isTypeMatch("x1", TestBean.class));
	assertFalse(lbf.isTypeMatch("&x1", TestBean.class));
	assertEquals(TestBean.class, lbf.getType("x1"));
	assertEquals(null, lbf.getType("&x1"));
	assertFalse(TestBeanFactory.initialized);
}
 
@Test
public void testWithFactoryBean() {
	DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
	RootBeanDefinition beanDef = new RootBeanDefinition(RequiredTestBean.class);
	beanDef.setFactoryBeanName("testBeanFactory");
	beanDef.setFactoryMethodName("create");
	factory.registerBeanDefinition("testBean", beanDef);
	factory.registerBeanDefinition("testBeanFactory", new RootBeanDefinition(RequiredTestBeanFactory.class));
	RequiredAnnotationBeanPostProcessor bpp = new RequiredAnnotationBeanPostProcessor();
	bpp.setBeanFactory(factory);
	factory.addBeanPostProcessor(bpp);
	factory.preInstantiateSingletons();
}
 
@Test
public void testNonStaticFactoryMethodFoundByNonEagerTypeMatching() {
	DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
	RootBeanDefinition factoryBd = new RootBeanDefinition(TestBeanFactory.class);
	lbf.registerBeanDefinition("factory", factoryBd);
	RootBeanDefinition rbd = new RootBeanDefinition(TestBeanFactory.class);
	rbd.setFactoryBeanName("factory");
	rbd.setFactoryMethodName("createTestBeanNonStatic");
	lbf.registerBeanDefinition("x1", rbd);

	TestBeanFactory.initialized = false;
	String[] beanNames = lbf.getBeanNamesForType(TestBean.class, true, false);
	assertEquals(1, beanNames.length);
	assertEquals("x1", beanNames[0]);
	assertFalse(lbf.containsSingleton("x1"));
	assertTrue(lbf.containsBean("x1"));
	assertFalse(lbf.containsBean("&x1"));
	assertTrue(lbf.isSingleton("x1"));
	assertFalse(lbf.isSingleton("&x1"));
	assertFalse(lbf.isPrototype("x1"));
	assertFalse(lbf.isPrototype("&x1"));
	assertTrue(lbf.isTypeMatch("x1", TestBean.class));
	assertFalse(lbf.isTypeMatch("&x1", TestBean.class));
	assertEquals(TestBean.class, lbf.getType("x1"));
	assertEquals(null, lbf.getType("&x1"));
	assertFalse(TestBeanFactory.initialized);
}
 
@Test
public void testNonStaticPrototypeFactoryMethodFoundByNonEagerTypeMatching() {
	DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
	RootBeanDefinition factoryBd = new RootBeanDefinition(TestBeanFactory.class);
	lbf.registerBeanDefinition("factory", factoryBd);
	RootBeanDefinition rbd = new RootBeanDefinition();
	rbd.setFactoryBeanName("factory");
	rbd.setFactoryMethodName("createTestBeanNonStatic");
	rbd.setScope(RootBeanDefinition.SCOPE_PROTOTYPE);
	lbf.registerBeanDefinition("x1", rbd);

	TestBeanFactory.initialized = false;
	String[] beanNames = lbf.getBeanNamesForType(TestBean.class, true, false);
	assertEquals(1, beanNames.length);
	assertEquals("x1", beanNames[0]);
	assertFalse(lbf.containsSingleton("x1"));
	assertTrue(lbf.containsBean("x1"));
	assertFalse(lbf.containsBean("&x1"));
	assertTrue(lbf.containsLocalBean("x1"));
	assertFalse(lbf.containsLocalBean("&x1"));
	assertFalse(lbf.isSingleton("x1"));
	assertFalse(lbf.isSingleton("&x1"));
	assertTrue(lbf.isPrototype("x1"));
	assertFalse(lbf.isPrototype("&x1"));
	assertTrue(lbf.isTypeMatch("x1", TestBean.class));
	assertFalse(lbf.isTypeMatch("&x1", TestBean.class));
	assertTrue(lbf.isTypeMatch("x1", Object.class));
	assertFalse(lbf.isTypeMatch("&x1", Object.class));
	assertEquals(TestBean.class, lbf.getType("x1"));
	assertEquals(null, lbf.getType("&x1"));
	assertFalse(TestBeanFactory.initialized);

	lbf.registerAlias("x1", "x2");
	assertTrue(lbf.containsBean("x2"));
	assertFalse(lbf.containsBean("&x2"));
	assertTrue(lbf.containsLocalBean("x2"));
	assertFalse(lbf.containsLocalBean("&x2"));
	assertFalse(lbf.isSingleton("x2"));
	assertFalse(lbf.isSingleton("&x2"));
	assertTrue(lbf.isPrototype("x2"));
	assertFalse(lbf.isPrototype("&x2"));
	assertTrue(lbf.isTypeMatch("x2", TestBean.class));
	assertFalse(lbf.isTypeMatch("&x2", TestBean.class));
	assertTrue(lbf.isTypeMatch("x2", Object.class));
	assertFalse(lbf.isTypeMatch("&x2", Object.class));
	assertEquals(TestBean.class, lbf.getType("x2"));
	assertEquals(null, lbf.getType("&x2"));
	assertEquals(1, lbf.getAliases("x1").length);
	assertEquals("x2", lbf.getAliases("x1")[0]);
	assertEquals(1, lbf.getAliases("&x1").length);
	assertEquals("&x2", lbf.getAliases("&x1")[0]);
	assertEquals(1, lbf.getAliases("x2").length);
	assertEquals("x1", lbf.getAliases("x2")[0]);
	assertEquals(1, lbf.getAliases("&x2").length);
	assertEquals("&x1", lbf.getAliases("&x2")[0]);
}
 
@Test
public void testNonStaticPrototypeFactoryMethodFoundByNonEagerTypeMatching() {
	DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
	RootBeanDefinition factoryBd = new RootBeanDefinition(TestBeanFactory.class);
	lbf.registerBeanDefinition("factory", factoryBd);
	RootBeanDefinition rbd = new RootBeanDefinition();
	rbd.setFactoryBeanName("factory");
	rbd.setFactoryMethodName("createTestBeanNonStatic");
	rbd.setScope(RootBeanDefinition.SCOPE_PROTOTYPE);
	lbf.registerBeanDefinition("x1", rbd);

	TestBeanFactory.initialized = false;
	String[] beanNames = lbf.getBeanNamesForType(TestBean.class, true, false);
	assertEquals(1, beanNames.length);
	assertEquals("x1", beanNames[0]);
	assertFalse(lbf.containsSingleton("x1"));
	assertTrue(lbf.containsBean("x1"));
	assertFalse(lbf.containsBean("&x1"));
	assertTrue(lbf.containsLocalBean("x1"));
	assertFalse(lbf.containsLocalBean("&x1"));
	assertFalse(lbf.isSingleton("x1"));
	assertFalse(lbf.isSingleton("&x1"));
	assertTrue(lbf.isPrototype("x1"));
	assertFalse(lbf.isPrototype("&x1"));
	assertTrue(lbf.isTypeMatch("x1", TestBean.class));
	assertFalse(lbf.isTypeMatch("&x1", TestBean.class));
	assertTrue(lbf.isTypeMatch("x1", Object.class));
	assertFalse(lbf.isTypeMatch("&x1", Object.class));
	assertEquals(TestBean.class, lbf.getType("x1"));
	assertEquals(null, lbf.getType("&x1"));
	assertFalse(TestBeanFactory.initialized);

	lbf.registerAlias("x1", "x2");
	assertTrue(lbf.containsBean("x2"));
	assertFalse(lbf.containsBean("&x2"));
	assertTrue(lbf.containsLocalBean("x2"));
	assertFalse(lbf.containsLocalBean("&x2"));
	assertFalse(lbf.isSingleton("x2"));
	assertFalse(lbf.isSingleton("&x2"));
	assertTrue(lbf.isPrototype("x2"));
	assertFalse(lbf.isPrototype("&x2"));
	assertTrue(lbf.isTypeMatch("x2", TestBean.class));
	assertFalse(lbf.isTypeMatch("&x2", TestBean.class));
	assertTrue(lbf.isTypeMatch("x2", Object.class));
	assertFalse(lbf.isTypeMatch("&x2", Object.class));
	assertEquals(TestBean.class, lbf.getType("x2"));
	assertEquals(null, lbf.getType("&x2"));
	assertEquals(1, lbf.getAliases("x1").length);
	assertEquals("x2", lbf.getAliases("x1")[0]);
	assertEquals(1, lbf.getAliases("&x1").length);
	assertEquals("&x2", lbf.getAliases("&x1")[0]);
	assertEquals(1, lbf.getAliases("x2").length);
	assertEquals("x1", lbf.getAliases("x2")[0]);
	assertEquals(1, lbf.getAliases("&x2").length);
	assertEquals("&x1", lbf.getAliases("&x2")[0]);
}
 
@Test
public void testNonStaticPrototypeFactoryMethodFoundByNonEagerTypeMatching() {
	DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
	RootBeanDefinition factoryBd = new RootBeanDefinition(TestBeanFactory.class);
	lbf.registerBeanDefinition("factory", factoryBd);
	RootBeanDefinition rbd = new RootBeanDefinition();
	rbd.setFactoryBeanName("factory");
	rbd.setFactoryMethodName("createTestBeanNonStatic");
	rbd.setScope(RootBeanDefinition.SCOPE_PROTOTYPE);
	lbf.registerBeanDefinition("x1", rbd);

	TestBeanFactory.initialized = false;
	String[] beanNames = lbf.getBeanNamesForType(TestBean.class, true, false);
	assertEquals(1, beanNames.length);
	assertEquals("x1", beanNames[0]);
	assertFalse(lbf.containsSingleton("x1"));
	assertTrue(lbf.containsBean("x1"));
	assertFalse(lbf.containsBean("&x1"));
	assertTrue(lbf.containsLocalBean("x1"));
	assertFalse(lbf.containsLocalBean("&x1"));
	assertFalse(lbf.isSingleton("x1"));
	assertFalse(lbf.isSingleton("&x1"));
	assertTrue(lbf.isPrototype("x1"));
	assertFalse(lbf.isPrototype("&x1"));
	assertTrue(lbf.isTypeMatch("x1", TestBean.class));
	assertFalse(lbf.isTypeMatch("&x1", TestBean.class));
	assertTrue(lbf.isTypeMatch("x1", Object.class));
	assertFalse(lbf.isTypeMatch("&x1", Object.class));
	assertEquals(TestBean.class, lbf.getType("x1"));
	assertEquals(null, lbf.getType("&x1"));
	assertFalse(TestBeanFactory.initialized);

	lbf.registerAlias("x1", "x2");
	assertTrue(lbf.containsBean("x2"));
	assertFalse(lbf.containsBean("&x2"));
	assertTrue(lbf.containsLocalBean("x2"));
	assertFalse(lbf.containsLocalBean("&x2"));
	assertFalse(lbf.isSingleton("x2"));
	assertFalse(lbf.isSingleton("&x2"));
	assertTrue(lbf.isPrototype("x2"));
	assertFalse(lbf.isPrototype("&x2"));
	assertTrue(lbf.isTypeMatch("x2", TestBean.class));
	assertFalse(lbf.isTypeMatch("&x2", TestBean.class));
	assertTrue(lbf.isTypeMatch("x2", Object.class));
	assertFalse(lbf.isTypeMatch("&x2", Object.class));
	assertEquals(TestBean.class, lbf.getType("x2"));
	assertEquals(null, lbf.getType("&x2"));
	assertEquals(1, lbf.getAliases("x1").length);
	assertEquals("x2", lbf.getAliases("x1")[0]);
	assertEquals(1, lbf.getAliases("&x1").length);
	assertEquals("&x2", lbf.getAliases("&x1")[0]);
	assertEquals(1, lbf.getAliases("x2").length);
	assertEquals("x1", lbf.getAliases("x2")[0]);
	assertEquals(1, lbf.getAliases("&x2").length);
	assertEquals("&x1", lbf.getAliases("&x2")[0]);
}