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

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

@Test
public void listenersInApplicationContextWithNestedChild() {
	StaticApplicationContext context = new StaticApplicationContext();
	RootBeanDefinition nestedChild = new RootBeanDefinition(StaticApplicationContext.class);
	nestedChild.getPropertyValues().add("parent", context);
	nestedChild.setInitMethodName("refresh");
	context.registerBeanDefinition("nestedChild", nestedChild);
	RootBeanDefinition listener1Def = new RootBeanDefinition(MyOrderedListener1.class);
	listener1Def.setDependsOn("nestedChild");
	context.registerBeanDefinition("listener1", listener1Def);
	context.refresh();

	MyOrderedListener1 listener1 = context.getBean("listener1", MyOrderedListener1.class);
	MyEvent event1 = new MyEvent(context);
	context.publishEvent(event1);
	assertTrue(listener1.seenEvents.contains(event1));

	SimpleApplicationEventMulticaster multicaster = context.getBean(
			AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME,
			SimpleApplicationEventMulticaster.class);
	assertFalse(multicaster.getApplicationListeners().isEmpty());

	context.close();
	assertTrue(multicaster.getApplicationListeners().isEmpty());
}
 
@Test
@SuppressWarnings("unchecked")
public void testInitSecurityAwarePrototypeBean() {
	final DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
	RootBeanDefinition bd = new RootBeanDefinition(TestSecuredBean.class);
	bd.setScope(ConfigurableBeanFactory.SCOPE_PROTOTYPE);
	bd.setInitMethodName("init");
	lbf.registerBeanDefinition("test", bd);
	final Subject subject = new Subject();
	subject.getPrincipals().add(new TestPrincipal("user1"));

	TestSecuredBean bean = (TestSecuredBean) Subject.doAsPrivileged(subject,
			(PrivilegedAction) () -> lbf.getBean("test"), null);
	assertNotNull(bean);
	assertEquals("user1", bean.getUserName());
}
 
@Test
public void listenersInApplicationContextWithNestedChild() {
	StaticApplicationContext context = new StaticApplicationContext();
	RootBeanDefinition nestedChild = new RootBeanDefinition(StaticApplicationContext.class);
	nestedChild.getPropertyValues().add("parent", context);
	nestedChild.setInitMethodName("refresh");
	context.registerBeanDefinition("nestedChild", nestedChild);
	RootBeanDefinition listener1Def = new RootBeanDefinition(MyOrderedListener1.class);
	listener1Def.setDependsOn("nestedChild");
	context.registerBeanDefinition("listener1", listener1Def);
	context.refresh();

	MyOrderedListener1 listener1 = context.getBean("listener1", MyOrderedListener1.class);
	MyEvent event1 = new MyEvent(context);
	context.publishEvent(event1);
	assertTrue(listener1.seenEvents.contains(event1));

	SimpleApplicationEventMulticaster multicaster = context.getBean(
			AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME,
			SimpleApplicationEventMulticaster.class);
	assertFalse(multicaster.getApplicationListeners().isEmpty());

	context.close();
	assertTrue(multicaster.getApplicationListeners().isEmpty());
}
 
@SuppressWarnings("unchecked")
@Test
public void testInitSecurityAwarePrototypeBean() {
	final DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
	RootBeanDefinition bd = new RootBeanDefinition(TestSecuredBean.class);
	bd.setScope(ConfigurableBeanFactory.SCOPE_PROTOTYPE);
	bd.setInitMethodName("init");
	lbf.registerBeanDefinition("test", bd);
	final Subject subject = new Subject();
	subject.getPrincipals().add(new TestPrincipal("user1"));

	TestSecuredBean bean = (TestSecuredBean) Subject.doAsPrivileged(subject,
			new PrivilegedAction() {
				@Override
				public Object run() {
					return lbf.getBean("test");
				}
			}, null);
	assertNotNull(bean);
	assertEquals("user1", bean.getUserName());
}
 
@Test
public void listenersInApplicationContextWithNestedChild() {
	StaticApplicationContext context = new StaticApplicationContext();
	RootBeanDefinition nestedChild = new RootBeanDefinition(StaticApplicationContext.class);
	nestedChild.getPropertyValues().add("parent", context);
	nestedChild.setInitMethodName("refresh");
	context.registerBeanDefinition("nestedChild", nestedChild);
	RootBeanDefinition listener1Def = new RootBeanDefinition(MyOrderedListener1.class);
	listener1Def.setDependsOn("nestedChild");
	context.registerBeanDefinition("listener1", listener1Def);
	context.refresh();

	MyOrderedListener1 listener1 = context.getBean("listener1", MyOrderedListener1.class);
	MyEvent event1 = new MyEvent(context);
	context.publishEvent(event1);
	assertTrue(listener1.seenEvents.contains(event1));

	SimpleApplicationEventMulticaster multicaster = context.getBean(
			AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME,
			SimpleApplicationEventMulticaster.class);
	assertFalse(multicaster.getApplicationListeners().isEmpty());

	context.close();
	assertTrue(multicaster.getApplicationListeners().isEmpty());
}
 
@SuppressWarnings("unchecked")
@Test
public void testInitSecurityAwarePrototypeBean() {
	final DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
	RootBeanDefinition bd = new RootBeanDefinition(TestSecuredBean.class);
	bd.setScope(ConfigurableBeanFactory.SCOPE_PROTOTYPE);
	bd.setInitMethodName("init");
	lbf.registerBeanDefinition("test", bd);
	final Subject subject = new Subject();
	subject.getPrincipals().add(new TestPrincipal("user1"));

	TestSecuredBean bean = (TestSecuredBean) Subject.doAsPrivileged(subject,
			new PrivilegedAction() {
				@Override
				public Object run() {
					return lbf.getBean("test");
				}
			}, null);
	assertNotNull(bean);
	assertEquals("user1", bean.getUserName());
}
 
private DefaultListableBeanFactory createBeanFactoryAndRegisterBean(final Class<?> beanClass,
		final String initMethodName, final String destroyMethodName) {
	DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
	RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass);
	beanDefinition.setInitMethodName(initMethodName);
	beanDefinition.setDestroyMethodName(destroyMethodName);
	beanFactory.addBeanPostProcessor(new CommonAnnotationBeanPostProcessor());
	beanFactory.registerBeanDefinition(LIFECYCLE_TEST_BEAN, beanDefinition);
	return beanFactory;
}
 
private DefaultListableBeanFactory createBeanFactoryAndRegisterBean(final Class<?> beanClass,
		final String initMethodName, final String destroyMethodName) {
	DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
	RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass);
	beanDefinition.setInitMethodName(initMethodName);
	beanDefinition.setDestroyMethodName(destroyMethodName);
	beanFactory.addBeanPostProcessor(new CommonAnnotationBeanPostProcessor());
	beanFactory.registerBeanDefinition(LIFECYCLE_TEST_BEAN, beanDefinition);
	return beanFactory;
}
 
private void createDataSourceProxy(ConfigurableListableBeanFactory beanFactory,
                                   String beanName, BeanDefinition originDataSource,
                                   String jdbcUrl) {
    // re-register origin datasource bean
    BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) beanFactory;
    beanDefinitionRegistry.removeBeanDefinition(beanName);
    boolean isPrimary = originDataSource.isPrimary();
    originDataSource.setPrimary(false);
    beanDefinitionRegistry.registerBeanDefinition(transformDatasourceBeanName(beanName),
        originDataSource);
    // register proxied datasource
    RootBeanDefinition proxiedBeanDefinition = new RootBeanDefinition(SmartDataSource.class);
    proxiedBeanDefinition.setRole(BeanDefinition.ROLE_APPLICATION);
    proxiedBeanDefinition.setPrimary(isPrimary);
    proxiedBeanDefinition.setInitMethodName("init");
    proxiedBeanDefinition.setDependsOn(transformDatasourceBeanName(beanName));
    MutablePropertyValues originValues = originDataSource.getPropertyValues();
    MutablePropertyValues values = new MutablePropertyValues();
    String appName = environment.getProperty(TRACER_APPNAME_KEY);
    Assert.isTrue(!StringUtils.isBlank(appName), TRACER_APPNAME_KEY + " must be configured!");
    values.add("appName", appName);
    values.add("delegate", new RuntimeBeanReference(transformDatasourceBeanName(beanName)));
    values.add("dbType",
        DataSourceUtils.resolveDbTypeFromUrl(unwrapPropertyValue(originValues.get(jdbcUrl))));
    values.add("database",
        DataSourceUtils.resolveDatabaseFromUrl(unwrapPropertyValue(originValues.get(jdbcUrl))));
    proxiedBeanDefinition.setPropertyValues(values);
    beanDefinitionRegistry.registerBeanDefinition(beanName, proxiedBeanDefinition);
}
 
private DefaultListableBeanFactory createBeanFactoryAndRegisterBean(final Class<?> beanClass,
		final String initMethodName, final String destroyMethodName) {
	DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
	RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass);
	beanDefinition.setInitMethodName(initMethodName);
	beanDefinition.setDestroyMethodName(destroyMethodName);
	beanFactory.addBeanPostProcessor(new CommonAnnotationBeanPostProcessor());
	beanFactory.registerBeanDefinition(LIFECYCLE_TEST_BEAN, beanDefinition);
	return beanFactory;
}