我对 applicationContext.xml
中的类声明有疑问在 applicationContext.xml 中,我们是否需要指定应用程序中的所有类? 例如。 在我的小型网络应用程序中,我有一个实体类,服务类和 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
@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)
我做错了什么才能获得 nullpointer异常?
答案 0 :(得分:4)
在applicationContext.xml中,我们需要指定所有类 申请?
没有。声明像net.test.model.Employees
这样的模型类是没有意义的,除非你需要一个原型来处理它,比如初始化它的值,但是你可以直接在类中完成它并实例化它。
因此,如果我需要多个实体,服务和dao类 提到applicationContext.xml中的所有类?
正如我之前解释的那样,实体类没有。服务和DAO是可以的,因为大多数时候你需要向服务注入DAO(这就是DI的重点)。但是,当然,如果您创建3个DAO并且希望将它们注入到3个服务中,那么请在Spring XML Bean Definition文件(您称之为applicationContext.xml
)中提及它们。
但有一点,您可能希望使用package scanning自动检测和annotation based config来避免在Bean定义文件中写入所有内容。
答案 1 :(得分:2)
应用程序上下文中的bean声明是在应用程序容器中注册bean。
如果bean未注册,则容器将无法依赖注入该类的任何实例,或者将拦截器应用于类的对象。
因此,除非拦截它或者注入它或者创建它的默认单例对象之类的任何任务都不需要bean的引用,否则不需要在applicationContext.xml中声明它
希望这有帮助。
答案 2 :(得分:0)
理想情况下,另一种方法是使用Spring Annotations,这样就不会在xml中添加多个条目。