Quantcast
Channel: Frank Sun » Design Pattern
Viewing all articles
Browse latest Browse all 13

Annotation与工厂模式解耦dao与service

$
0
0

开发中往往service、dao并行完成,但是service层又需要调用dao层的CRUD方法,这意味着dao必须先于service完成。这在开发中会极大降低效率的。

通过注解(Annotatoin)我们可以轻松实现两个层次的解耦

 

首先写一个注解类

@Retention(RetentionPolicy.RUNTIME)

public @interface getClassAnnotation{

public String className();

}

 

在dao层写一个工厂

public class UserDaoFactory {

private String userDaoClassName;
private static UserDaoFactory instance = new UserDaoFactory();

private UserDaoFactory(){
 ClassNameAnnotaton annotation = UserDao.class.getAnnotation(ClassNameAnnotaton.class);
 this.userDaoClassName = annotation.className();
}

public static UserDaoFactory newInstance(){
 return instance;
}

public UserDao getUserDao(){
 try {
  return (UserDao)Class.forName(userDaoClassName).newInstance();
 } catch (Exception e) {
  throw new RuntimeException(e);
 }
}

}

 

//在UserDao接口中注解对应的className

@ClassNameAnnotaton(className=”cn.itcast.dao.UserDaoHibernateImpl”)
public interface UserDao {

public User getUser(String id);

public boolean save(User user);

public boolean delete(String id);

public User update(User user);
}

 

对UserDao的实现有多种如:UserDaoJdbcImpl、UserDaoHibernateImpl

只需要在接口上标明是哪一个实现类

 

这样一来在Service层就可以直接通过工厂获得dao实现类

UserDao dao = UserDaoFactory.newInstance().getUserDao();

 

 from: http://blog.sina.com.cn/s/blog_7241b371010182mp.html


Viewing all articles
Browse latest Browse all 13

Latest Images

Trending Articles





Latest Images