私はサービスレイヤーに汎用抽象クラスを実装しようとしています。私はすでに私のDAO層でsimliarパターンを使用しており、それは正常に動作します。私はSpringのPractice v8 ebookの実例を見つけました。私は、次の作業コードをオートワイヤリングする方法があるのだろうかと思っています。 (コードは動作しますが、私は、私はクラスのどのメソッドを使用する前に、私のヘルパーメソッド 'setDao' を呼び出す必要があります)Spring 3サービス抽象クラスの質問を持つDaoレイヤー
Testクラス:
public class App {
public static void main(String[] args) {
ApplicationContext appContext = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");
MyService service = (MyService)appContext.getBean("myService");
service.setDao();
Heading detail = new Heading();
detail.setName("hello");
service.save(detail);
Heading dos = service.findById(Long.valueOf(1));
System.out.println(dos);
}
}
MyServiceImplクラス
@Service("myService")
public class MyServiceImpl extends AbstractServiceImpl<Heading> implements HeadingService {
@Autowired
private HeadingDao headingDao;
public void setHeadingDao(HeadingDao headingDao) {
this.headingDao = headingDao;
}
public void setDao() {
super.setDao(this.headingDao);
}
}
たMyServiceインターフェース
public interface HeadingService extends AbstractService<Heading> {
public void setDao();
}
AbstractServiceImplクラス
@Service
public abstract class AbstractServiceImpl<T extends Object> implements AbstractService<T> {
private AbstractDao<T> dao;
public void setDao(AbstractDao<T> dao) {
this.dao = dao;
}
public void save(T t) {
dao.save(t);
}
public T findById(Long id) {
return (T)dao.findById(id);
}
public List<T> findAll() {
return dao.findAll();
}
public void update(T t) {
dao.update(t);
}
public void delete(T t) {
dao.delete(t);
}
public long count() {
return dao.count();
}
}
AbstractServiceインタフェース
public interface AbstractService<T extends Object> {
public void save(T t);
public T findById(Long id);
public List<T> findAll();
public void update(T t);
public void delete(T t);
public long count();
}
Btw、あなたのAbstractServiceについて - あなたの汎用DAOとサービスインタフェースがほぼ同じメソッド定義を持っているかのようです。何がポイントですか?大量のサービスメソッドがDAOメソッドを呼び出すだけであれば、DAOとは別のサービスレイヤを持つのはどうですか? AbstractServiceを使用するすべてのクラスは実際に 'count()'または 'findAll()'メソッドにアクセスできる必要がありますか?私は、この抽象クラスで利用可能なService-Layerメソッドのサイズを減らすことを検討し、真に必要な記述メソッドのみを使用することで、多くのコードを削減することをお勧めします。 –
ありがとうございます。それは理にかなっています。 – blong824