J 2 EE開発フレーム構築(8)-service層実装BaserviceとBaseServiceImpl


現在のプロジェクトのほとんどは3階建ての構造に基づいています.前にはすでにBaseRepositoryが実現されています.このような祭りはserviceのパッケージ化を継続して実現しています.
1.まずserviceのインターフェースBaseServiceを確認する:
public interface BaseService<T extends AbstractEntity<ID>, ID extends Serializable> {
	/**
	 **       
	 * @param m    
	 * @return        
	 */
	public T save(T t);
	public List<T> save(List<T> entities);
	/**
	 *           
	 * @param id           id,    id     ,  ,list....
	 */
	public void remove(ID... ids);
	/**
	 *     
	 * @param m    
	 */
	public void remove(T t);
	public void remove(List<T> entities);
	public void removeAll();
	/**
	 *       
	 * @param m   
	 * @return        
	 */
	public void update(T t);
	/**
	 *       
	 * @param id
	 * @return
	 */
	public T findObject(ID id);
	/**
	 *        
	 * @param params
	 * @param page
	 * @return
	 * @throws RuntimeException
	 */
	public T findObject(Searchable searchable) throws RuntimeException;

	/**
	 *       
	 * @param id   
	 * @return      true,  false
	 */
	public boolean isExist(ID id);
	/**
	 *       
	 * @return    true     false
	 */
	public boolean isExist(Searchable searchable);
	/**
	 *         
	 * @return
	 */
	public List<T> findAll();
	/**
	 *           
	 * @param sort
	 * @return
	 */
	public List<T> findList(Sort sort);
	/**
	 * @param searchable       
	 * @return
	 */
	public List<T> findList(Searchable searchable);
	public List<T> findList(List<ID> ids);
	/**
	 *          
	 * @param pageable         
	 * @return
	 */
	public Page<T> findPage(Pageable pageable);
	/**
	 *             
	 * @param searchable    
	 * @return
	 */
	public Page<T> findPage(Searchable searchable);
	/**
	 *       
	 * @return     
	 */
	public Long count();
	/**
	 *               
	 * @param searchable   
	 * @return
	 */
	public Long count(Searchable searchable);
	/**
	 * @param hqlKey
	 * @param params    map,  ,list,         
	 */
	public void update(String sqlKey, Object... params);
	/**
	 *    hql  
	 * @param hqlKey
	 * @param params      map,  ,list,         
	 * @return
	 */
	public List<T> findList(String sqlKey, Object... params);
	public Page<T> findPage(Pageable pageable, String sqlKey, Object... params);
	/**
	 *    hql  
	 * @param hqlKey
	 * @param params    map ,  ,list,         
	 */
	public void remove(String sqlKey, Object... params);
}
は、このインターフェースには、一般的な方法、添削調査、改ページ、統計量などが含まれています.
2.serviceの実現類BaserviceImplを確認し、BaseServiceで実現するこれらのインターフェースはすべてBaseRepositoryを通過するので、BaserviceImplに当時の運行時刻のBaseRepositoryの実現類を指定します.ここで自分で注釈@Serviceを定義します.コードは以下の通りです.
/**
 *<span style="background-color: rgb(255, 0, 0);"> type   , type,name    ,name  </span>
 * @author silentwu
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@org.springframework.stereotype.Service
public @interface Service {
	/**
	 * service spring      
	 */
	String value() default "";
	/**
	 * Repository     
	 * 
	 * @return
	 */
	String name() default "";
	/**
	 * Repository     
	 * 
	 * @return
	 */
	Class<?> repositoryType();
}
BaseServiceImplでは、この注釈を取得して、repositoryTypeにアクセスできます.BaserviceImplのコード:
private BaseRepository<T, ID> baseRepository;
@PostConstruct
@SuppressWarnings("unchecked")
public void init() throws Exception {
	Service repository = this.getClass().getAnnotation(Service.class);
	if (Utils.isNotEmpty(repository)) {
		if (<span style="background-color: rgb(255, 0, 0);">Utils.isNotEmpty(repository.name())</span>) {
			baseRepository = SpringUtils.getBean(repository.name());
		} else if <span style="color:#ff0000;">(Utils.isNotEmpty(repository.repositoryType()</span>)) {
			baseRepository = (BaseRepository<T, ID>) SpringUtils.getBean(repository.repositoryType());
		} else {
			throw new Exception("com.hqhop.framework.common.bind.annotation.Repository    name type    !");
		}
	} else {
		throw new Exception("BaseServiceImpl         com.hqhop.framework.common.bind.annotation.Repository     !");
	}
}
@Serviceのコメントは、repositoryTypeが指定しなければなりません.name属性が指定されているなら、name属性は有効です.
他のインターフェースが実現したのは言うまでもないですが、すべてBaseRepositoryオブジェクトによって実現されました.