ApplicationContext 的实现类
(1)ClassPathXmlApplicationContext
从类的根路径下加载配置文件
(2)FileSystemXmlApplicationContext
从磁盘任意路径加载配置文件
(3)AnnotationConfigApplicationContext
当使用注解配置容器对象时,需要使用此类来创建 Spring 容器,用来读取注解
getBean() 方法
(1)传入指定 bean 的 id 字符串
public Object getBean(String name) throws BeansException {
this.assertBeanFactoryActive();
return this.getBeanFactory().getBean(name);
}
通过传入在 xml 文件中配置的指定 bean 的 id 字符串来获取 bean 的实例,这也是前文中一直使用的方法,不再赘述
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) app.getBean("userService");
(2)传入一个 Class 对象
public <T> T getBean(Class<T> requiredType) throws BeansException {
this.assertBeanFactoryActive();
return this.getBeanFactory().getBean(requiredType);
}
UserService.class 为 UserService 类的 Class 对象,这种写法不需要对 getBean() 的结果进行强转
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = app.getBean(UserService.class);
需要注意的是,当 xml 配置文件中配置了两个相同类型但 id 不同的 bean ,使用这种方法会出现错误
<bean id="userService1" class="Service.Implement.UserServiceImple">
<constructor-arg name="userDao" ref="userDao"/>
</bean>
<bean id="userService2" class="Service.Implement.UserServiceImple">
<constructor-arg name="userDao" ref="userDao"/>
</bean>