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
网友评论