1

我使用 Spring 3 做一个简单的配置。

我有一个名为 PropertyBeans.xml 的 XML 文件,如下所示:

<bean id="propertyBean" class="com.myapp.PropertyBean">
    <property name="rootDirLogPath" value="C:\Users\dede" />
</bean>

我有与这个 XML 匹配的 bean,然后我想使用这个注入了值的 bean。其实我有:

ApplicationContext context = new ClassPathXmlApplicationContext("AppPropertyBeans.xml");
PropertyBean obj = (PropertyBean) context.getBean("propertyBean");
String rootDirLogPath = obj.getRootDirLogPath();

这很好用,但我想知道是否有办法在每次我想使用 bean 时避免 ApplicationContext 的实例化。我听说过 BeanFactory 是个好主意吗?其他解决方案是什么?

换句话说:我应该在 Spring MVC 的每个控制器中调用这个应用程序上下文实例吗?

4

4 回答 4

4

如果要在控制器中使用 Spring bean,请在 applicationContext.xml 中添加一行:

<context:spring-configured/>
<task:annotation-driven/>
<context:component-scan base-package="by" />

然后按照以下方式编写控制器:

@Controller
public class IndexController {

    @Autowired
    private UserService userService;

    @Autowired
    private GroupService groupService;

        // methods with @RequestMapping annotation
}

这是微不足道的事情,所以如果您有任何疑问,强烈建议阅读“Spring in action book”,第 7 章:构建 Web 应用程序

于 2013-08-12T14:18:52.410 回答
0

ApplicationContext 的整个想法是有一个(因此名称,应用程序的上下文)。

所以如果你每次都创建一个新的,那你就错了。

如果您正确使用依赖注入,则包含该代码的对象将已被注入容器(Spring)实例化,并且 propertyBean 将已被注入。

于 2013-08-12T13:47:17.383 回答
0

您可以简单地将上下文添加为类中的成员,例如:

private ApplicationContext context;

并在构造函数或 init() 方法中实例化它。

于 2013-08-12T13:47:39.867 回答
0

使用autowiring或实现InitializingBean接口。

于 2013-08-12T13:57:49.817 回答