Spring实践手动注册Bean的几种方式

编程

第一种(ClassPathXmlApplicationContext)

1.此种方式使用传统xml方式启动spring容器(xml里面没有任何配置)

public static void main(String[] args) {

ClassPathXmlApplicationContext context = new

ClassPathXmlApplicationContext("spring/spring.xml");

// 获取spring bean 工厂 手动注册bean

context.getBeanFactory().registerSingleton("helloWord", new HelloWord());

// 启动spring容器

context.start();

// 从上下文获取bean

HelloWord helloWord = context.getBean("helloWord", HelloWord.class);

System.out.println(helloWord.say());

}

xml内容

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

第二种(AnnotationConfigApplicationContext)

/** 方法二:AnnotationConfigApplicationContext(Bootstrap.class) **/

AnnotationConfigApplicationContext applicationContext1 = new AnnotationConfigApplicationContext(Bootstrap.class);

DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) applicationContext1.getBeanFactory();

第三种:继承BeanDefinitionRegistryPostProcessor

1.创建一个DefinitionRegistryPostProcessor

/**

@Configuration

@Component

@Bean定义

**/

@Configuration

public class DefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {

@Override

public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0)

throws BeansException {

}

/**

* 先执行postProcessBeanDefinitionRegistry方法

* 在执行postProcessBeanFactory方法

*/

@Override

public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)

throws BeansException {

// 第一种 : 手动注入

// 注册bean

registerBean(registry, "hello", HelloWord.class);

registerBean(registry, "helloWord", HelloWord.class);

}

/**

注册bean

**/

private void registerBean(BeanDefinitionRegistry registry, String name, Class<?> beanClass) {

RootBeanDefinition bean = new RootBeanDefinition(beanClass);

registry.registerBeanDefinition(name, bean);

}

}

2.测试能否在spring上下文获取该bean

@SpringBoot" title="SpringBoot">SpringBootApplication

public class ApplicationBoot {

public static void main(String[] args) {

ApplicationContext applicationContext = SpringApplication.run(ApplicationBoot.class);

HelloWord helloWord = applicationContext.getBean("hello", HelloWord.class);

System.out.println(helloWord.say());

}

第四种:继承ApplicationContextAware

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;

import org.springframework.context.ApplicationContext;

import org.springframework.context.ApplicationContextAware;

import org.springframework.context.ConfigurableApplicationContext;

public class SpringContextUtils implements ApplicationContextAware {

@Override

public void setApplicationContext(ApplicationContext applicationContext)

throws BeansException {

/** 方法一:继承ApplicationContextAware:获得applicationContext **/

// 将applicationContext转换为ConfigurableApplicationContext

ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;

// 获取bean工厂并转换为DefaultListableBeanFactory

DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getBeanFactory();

//defaultListableBeanFactory.registerBeanDefinition(beanName, beanDefinition);

}

}

 

以上是 Spring实践手动注册Bean的几种方式 的全部内容, 来源链接: utcz.com/z/518049.html

回到顶部