我创建了两个独立的 Web 应用程序以及一个 Restful API 服务器。
它们是在 Eclipse 中作为动态 Web 项目签出的 Maven 项目
我使用的一些依赖项包括 Spring 3 MVC、Spring Security、Hibernate 和 JPA。
我的 Web 应用程序和 API 都在每个应用程序中使用了大量相同的域模型、DAO 和服务。
他们都有自己独立的model、dao、service。
结构:
***Consumer App:***
-Model<br/>
..User.java<br/>
..Card.java<br/>
..Purchase.java<br/>
-Dao<br/>
..UserDAO.java<br/>
..CardDAO.java<br/>
..PurchaseDAO.java<br/>
-Services<br/>
..UserService.java<br/>
..CardService.java<br/>
..PurchaseService.java<br/>
***Admin App:***
Same with few different models, dao's and services.
***API Server:***
Same with few different models, dao's and services.
用户:
@Entity
public class User implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -5232533507244034448L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotEmpty
@Size(min=2, max=15)
private String firstname;
@NotEmpty
@Size(min=2, max=15)
private String surname;
@NotEmpty
@Email
private String email;
@NotEmpty
@Size(min=6, max=10)
private String password;
@OneToOne(mappedBy="user", cascade={CascadeType.ALL})
private UserRole userRole;
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
private Set<Card> cards;
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
private Set<UserOffer> offers;
@Temporal(TemporalType.TIMESTAMP)
private Date dob;
@NotEmpty
private String sex;
.......
}
用户道:
@Repository
public class UserDAO extends AbstractJpaDAO<User> implements IUserDAO
{
@PersistenceContext
EntityManager entityManager;
public UserDAO()
{
setClazz(User.class);
}
public User findOneByEmail(String email)
{
return (User) entityManager
.createQuery("SELECT u FROM User u WHERE u.email = :email")
.setParameter("email", email).getSingleResult();
}
}
用户服务:
@Service
public class UserService implements IUserService
{
@Autowired
private IUserDAO userDAO;
public UserService()
{
}
@Transactional
public List<User> getAll()
{
return userDAO.findAll();
}
@Transactional
public User getById(Long id)
{
return userDAO.findOne(id);
}
...
}
如您所见,我需要删除这些重复项,并在可能的情况下为每个模型、dao 和服务保留一份副本。
从 Web 应用程序和 API 中删除我的模型、dao 和服务并将它们放在应该作为 jar 包含的单独项目/模块中的最佳方法是什么?
有没有人建议如何处理和实施这个?
来自在多个 Spring 应用程序之间创建共享模块的经验丰富的人的简要概述会很棒。