Spring中使用注解解决DAO层多态问题

hc_baby 2012-03-14 11:06:00
以下是DAO接口

public interface IAuthenticateDAO {
public boolean IsAvailableInTheAccount(AuthenticateVO authenticateVO);

public boolean IsAlreadyCertified(AuthenticateVO authenticateVO);

public void addAuthenticationInfoAndGiftLine(AuthenticateVO authenticateVO);

}

下面两个是实现类

public class PhoneAuthenticateDAOImpl implements IAuthenticateDAO {

public boolean IsAvailableInTheAccount(AuthenticateVO authenticateVO) {
return false;
}

public boolean IsAlreadyCertified(AuthenticateVO authenticateVO) {
return false;
}

public void addAuthenticationInfoAndGiftLine(AuthenticateVO authenticateVO) {
}
}


public class EmailAuthenticateDAOImpl implements IAuthenticateDAO {

@Override
public boolean IsAvailableInTheAccount(AuthenticateVO authenticateVO) {
return false;
}

@Override
public boolean IsAlreadyCertified(AuthenticateVO authenticateVO) {
return false;
}

@Override
public void addAuthenticationInfoAndGiftLine(AuthenticateVO authenticateVO) {
}
}


这样写的话 在Service层,使用注解的方式应该怎么配? 是不是这样:

@Service("authenticateService")
public class AuthenticateServiceImpl implements IAuthenticateService {
@Inject
private IAuthenticateDAO phoneAuthenticateDAO;
@Inject
private IAuthenticateDAO emailAuthenticateDAO;
}
...全文
737 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2013-04-15
  • 打赏
  • 举报
回复
引用 3 楼 lsx1984 的回复:
这样能够注入成功,如果是注入方式是byName。但是问题是这样就失去了多态的意义。我们要多态是想由程序在运行的时候时候决定注入哪个实现类,但是用spring的注入方式来实现多态貌似实现不了。比如: Java code?12345678@Repositorypublic class daoImpl implements dao{@ResourceIdatabase idb……
我觉得应该说多态的重点是在运行时决定具体实现类,这个应该是了 由谁决定可以说都是由程序决定的
tianma630 2013-04-15
  • 打赏
  • 举报
回复
你想想如果是你 没有指定名字 你能确定 @Inject private IAuthenticateDAO phoneAuthenticateDAO; @Inject private IAuthenticateDAO emailAuthenticateDAO; 这两个具体是IAuthenticateDAO的哪个实现类吗
lsx1984 2013-04-15
  • 打赏
  • 举报
回复
这样能够注入成功,如果是注入方式是byName。但是问题是这样就失去了多态的意义。我们要多态是想由程序在运行的时候时候决定注入哪个实现类,但是用spring的注入方式来实现多态貌似实现不了。比如:

@Repository
public class daoImpl implements dao{
@Resource
Idatabase idb;
void save(T entity){ idb.executeSQL(entity);//实现类 SaveImpl中重写的方法 }
void update(T entity){ idb.executeSQL(entity);//实现类 UpdateImpl中重写的方法 }
void remove(T entity){ idb.executeSQL(entity);//实现类 RemoveImpl中重写的方法 }
}
在以上代码我们希望由容器判断该注入什么类,但是实际上貌似不行,会抛出异常。
hc_baby 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuda236556254 的回复:]

首先我想你注入的两个bean也因该交给spring管理。这样才能注入成功。
[/Quote]
@Repository("emailAuthenticateDAO")
public class EmailAuthenticateDAOImpl implements IAuthenticateDAO {}
这个考虑了。。 问题是我不知道是否会成功。
成一粒 2012-03-14
  • 打赏
  • 举报
回复
首先我想你注入的两个bean也因该交给spring管理。这样才能注入成功。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧