【发布时间】:2013-02-13 10:33:47
【问题描述】:
我刚刚开始了解 Spring IOC 概念。我经常看到网上找到的大部分例子都是用代码来获取对象的。
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Hello hello = (Hello) appContext.getBean("hello");
作为stackoverflow中这些问题1和2的参考。我推断,没有必要在代码中使用 appContext.getBean("hello") ,这被认为是不好的做法。另外,不推荐了。在这里纠正我,如果我的推断是错误的。
考虑到这一点,我对我的项目进行了相应的更改。 这是我的 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<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-3.2.xsd">
<bean id="utilClassRef" class="org.hd.derbyops.DUtils" lazy-init="false" />
<bean id="appContext" class="org.hd.derbyops.ContextProvider" lazy-init="false">
<property name="utils" ref="utilClassRef" />
</bean>
</beans>
我的 contextProvider 类代码
public class ContextProvider implements ApplicationContextAware {
private static ApplicationContext ctx;
/**
* Objects as properties
*/
private static DUtils utils;
public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
ctx = appContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
public static DUtils getUtils() {
return utils;
}
public void setUtils(DUtils dUtilsRef) {
utils = dUtilsRef;
}
}
例如,考虑一个依赖于 org.hd.derbyops.DUtils 的 A 类。 我正在使用以下代码行
ContextProvider.getUtils();
为了在 A 类中获取 DUtils 对象,从而避免在我的代码中的任何地方使用ApplicationContext.getBean()。
假设,如果我有 10 个类,并且我的 A 类依赖于所有这些类,那么在不使用 ApplicationContext.getBean() 的情况下创建和访问其对象。在这种情况下,如上所述,我想创建 ContextProvider 类的属性,然后是该属性的 setter 和 getter,其中get<PropertyName> 是静态的。这样,我可以在需要对象的任何地方使用它,就像这样
ContextProvider.get<PropertyName>;
这是我的简短问题。 首先,我的方法对吗?如果是对的,在启动的时候加载所有的bean,会不会是性能杀手?如果不至少多次调用 getBean,您将如何在应用程序中做到这一点?
如果您要设计一个 Web 应用程序并且您要实现 Spring IOC,而无需在任何代码中使用 ApplicationContext.getBean()。你会怎么做?
注意:参考上面标记的其他问题
调用 ApplicationContext.getBean() 不是控制反转!
【问题讨论】:
-
您是在使用 Spring MVC 还是尝试使用基本的 servlet?
-
我没有使用 Spring MVC,只是将它用于 IOC
-
一般来说,someone 需要从
ApplicationContext获取一个bean。理想情况下,它只会被调用一次,并且会被引导对象调用......
标签: java spring jakarta-ee inversion-of-control spring-ioc