美文网首页
获取Spring的IOC容器的几种方式

获取Spring的IOC容器的几种方式

作者: chanyi | 来源:发表于2020-10-10 08:54 被阅读0次

Spring通过Bean的注入过程,将bean存放在SpringIOC容器中,想要获取容器中的bean有两种方式
一种是直接通过注解(例如:@Autowired,@Resource等)获取。
另一种方式是通过获取SpringContext,然后使用getBean方法获取Bean
获取SpringContext的方式有几种呢?

主要有一下三种:
1、通过实现ApplicationContextAware接口,获取applicationContext
具体代码如下:

@Component
public class ApplicationContextCustom implements ApplicationContextAware {

    public static ApplicationContext applicationContext;

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("获取ApplicationContext");
        ApplicationContextCustom.applicationContext = applicationContext;
    }
}

使用时只需要通过ApplicationContext的静态变量applicationContext获取Bean即可。
2、通过ClassPathXmlApplicationContext获取applicationContext
这种方式只能获取指定的xml配置中的bean
具体代码如下:

ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("beans.xml");
        System.out.println(applicationContext.getBean("user"));
        System.out.println(applicationContext.getBean("AService"));

User是resource文件夹下beans.xml文件中配置了的bean
AService是使用注解@Component注入的bean
结果是User可以返回bean而Aservice找不到

com.chanyi.processor.User@2bf94401
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'AService' available

3、通过AnnotationConfigApplicationContext获取applicationContext
这种方式只能获取@Configuration注解注释的bean

AnnotationConfigApplicationContext applicationContext1 =
                new AnnotationConfigApplicationContext(Person.class);
        System.out.println(applicationContext1.getBean("person"));
        System.out.println(applicationContext1.getBean("AService"));

Person是使用Configuration注解了的bean
AService是使用注解@Component注入的bean
结果是User可以返回bean而Aservice找不到

com.chanyi.processor.Person$$EnhancerBySpringCGLIB$$2dd8c5a7@511505e7
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'AService' available

相关文章

网友评论

      本文标题:获取Spring的IOC容器的几种方式

      本文链接:https://www.haomeiwen.com/subject/taxlpktx.html