我有一个由消息驱动 bean 和几个会话 bean 组成的应用程序。其中之一有一个 DAO 对象,负责访问数据库或 FTP 服务器。
我需要有两个应用程序。它们之间的唯一区别是 DAO 类的实例。我可以在部署阶段指定该实例吗?
我的目的是避免代码重复。
我有一个由消息驱动 bean 和几个会话 bean 组成的应用程序。其中之一有一个 DAO 对象,负责访问数据库或 FTP 服务器。
我需要有两个应用程序。它们之间的唯一区别是 DAO 类的实例。我可以在部署阶段指定该实例吗?
我的目的是避免代码重复。
如果 DAO 只是一个 POJO,那么如果您使用的是 EE6,我建议使用 Class env-entry(如果不是,则建议使用 String env-entry,然后自己执行 Class.forName):
<env-entry>
<env-entry-name>daoClass</env-entry-name>
<env-entry-type>java.lang.Class</env-entry-type>
<!-- Specify a default, override at deployment time. -->
<env-entry-value>com.example.project.DefaultDAO</env-entry-value>
</env-entry>
@Resource(name="daoClass")
private void setDAOClass(Class<com.example.project.DAO> daoClass) {
this.dao = daoClass.newInstance();
}
或者,如果您的 DAO 实现是 EJB,那么您可以使用@EJB
注入,并在部署时指定绑定名称。