J 2 EE開発フレーム構築(8)-service層実装BaserviceとBaseServiceImpl
4325 ワード
現在のプロジェクトのほとんどは3階建ての構造に基づいています.前にはすでにBaseRepositoryが実現されています.このような祭りはserviceのパッケージ化を継続して実現しています.
1.まずserviceのインターフェースBaseServiceを確認する:
2.serviceの実現類BaserviceImplを確認し、BaseServiceで実現するこれらのインターフェースはすべてBaseRepositoryを通過するので、BaserviceImplに当時の運行時刻のBaseRepositoryの実現類を指定します.ここで自分で注釈@Serviceを定義します.コードは以下の通りです.
他のインターフェースが実現したのは言うまでもないですが、すべてBaseRepositoryオブジェクトによって実現されました.
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オブジェクトによって実現されました.