4

我对applicationContext.xml中的类声明有疑问

applicationContext.xml中我们是否需要指定应用程序中的所有类?例如,在我的小型 Web 应用程序中,我有一个实体类、服务类和DAO类。所以目前它被定义为

<!-- Beans Declaration -->
    <bean id="Employees"
        class="net.test.model.Employees" />

 <!-- User Service Declaration -->
    <bean id="
        EmployeeService" class="net.test.employees.service.EmployeeService">
        <property name="employeesDAO" ref="EmployeeDAOImpl" />
    </bean>

 <!-- User DAO Declaration -->
    <bean id="EmployeeDAO" class="net.test.employee.dao.EmployeeDAOImpl">
        <property name="sessionFactory" ref="SessionFactory" />
    </bean>

因此,如果我有多个实体、服务和 dao 类,我需要在 中提及所有这些类applicationContext.xml吗?

对此的任何见解都是非常可观的。

问候

更新 1

托管豆

@ManagedBean(name="empMB")
@Named
@Scope("request")
public class EmployeesManagedBean implements Serializable {

我有注入注释

@Inject
EmployeesService employeesService;

在EmployeesService中,我有类似的注释

@Named
public class EmployeesService implements IEmployeesService {

@Inject
EmployeesDAO employeesDAO;

@Override
public List<Employees> getEmployees() {
    return getEmployeesDAO().getEmployees();
}

最后在 applicationContext.xml 我有

<context:component-scan base-package="net.test" />

现在的问题是当我运行我的应用程序时

java.lang.NullPointerException at
net.test.managed.bean.EmployeesManagedBean.getEmpList(EmployeesManagedBean.java:53)

我做错了什么来获得空指针异常

4

3 回答 3

4

在 applicationContext.xml 中我们是否需要指定应用程序中的所有类?

不。声明像你这样的模型类net.test.model.Employees是没有意义的,除非你需要一个原型来使用,比如初始化它的值,但是你可以直接在类中这样做并实例化它。

因此,如果我有多个实体、服务和 dao 类,是否需要在 applicationContext.xml 中提及所有这些类?

正如我之前解释的,实体类没有。服务和 DAO 都可以,因为大多数时候您需要将 DAO 注入到服务中(这就是 DI 的重点)。但是当然,如​​果您创建了 3 个 DAO 并且希望将它们注入到您的 3 个服务中,那么请在您的 Spring XML Bean 定义文件(您所称的applicationContext.xml)中提及它们。

但有一件事,您可能希望使用包扫描自动检测和基于注释的配置来避免在您的 Bean 定义文件中写入所有内容。

于 2012-12-10T05:28:10.697 回答
2

应用上下文中的bean声明是在应用容器中注册bean。

如果 bean 未注册,容器将无法依赖注入该类的任何实例,或将拦截器应用于该类的对象。

因此,除非任何任务(如拦截它或注入它,或者创建它的默认单例对象)不需要 bean 的引用,否则不需要在 applicationContext.xml 中声明它

希望这可以帮助。

于 2012-12-10T08:40:35.413 回答
0

理想情况下是的,另一种方法是使用Spring Annotations,这样您就不会在 xml 中添加多个条目。

于 2012-12-10T05:23:05.993 回答