1. 获取指定类型的bean:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyClass myClass = context.getBean(MyClass.class);
在这个例子中,MyClass.class是你想要获取的bean的类型。Spring会查找并返回这个类型的bean。
2. 获取指定名称的bean:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyClass myClass = (MyClass) context.getBean("myClass");
在这个例子中,"myClass"是你想要获取的bean的ID。Spring会查找并返回这个ID的bean。
3. 获取指定名称和类型的bean:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyClass myClass = context.getBean("myClass", MyClass.class);
在这个例子中,"myClass"是你想要获取的bean的ID,MyClass.class是你想要获取的bean的类型。Spring会查找并返回这个ID和类型的bean。
如果你在getBean()方法中指定的类型是一个接口或者父类,Spring会在容器中查找匹配的子类或者实现类的bean。
例如,假设你有一个接口MyInterface,和一个实现了这个接口的类MyClass。如果你尝试获取MyInterface类型的bean,Spring将返回MyClass的实例(假设它是唯一匹配的bean)。
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyInterface myInterface = context.getBean(MyInterface.class); // 这将返回一个MyClass的实例
同样,如果你有一个父类MySuperClass,和一个继承了这个父类的类MyClass。如果你尝试获取MySuperClass类型的bean,Spring将返回MyClass的实例(假设它是唯一匹配的bean)。
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MySuperClass mySuperClass = context.getBean(MySuperClass.class); // 这将返回一个MyClass的实例
但是,如果有多个bean匹配该类型,Spring将抛出NoUniqueBeanDefinitionException异常,因为它不知道应该返回哪个bean。