非常に下手な万用汎用サービスの実現

1705 ワード

書き終わったらもう吐いた

@Service
public class PubManager<T, PK extends Serializable>{
	
	private SessionFactory sessionFactory;
	@Autowired
	private PubManagerImpl<T, PK> mgr;
	
	@Autowired  
    public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
    }

	public PubManagerImpl<T, PK> getI(Class<T> c){		
		if(null == mgr.getDAO()){
			mgr.setDao(new HibernateDao<T, PK>(sessionFactory ,c));
		}	
		return mgr;		
	}		
	
}

@Service
@Transactional
public class PubManagerImpl<T, PK extends Serializable> extends AbsManager<T, PK>  implements absMgr<T, PK> {
	
	private HibernateDao<T, PK> dao;	
	
	@Override
	public HibernateDao<T, PK> getDAO() {		
		return dao;
	}

	public void setDao(HibernateDao<T, PK> dao) {
		this.dao = dao;
	}
	
}

Controller
@RequestMapping("/xxx/xxxx")
public class XxxxXxxxXxxController {
	
	@Autowired  
	private CodeManager codeManager;
	
	@Autowired  
	private PubManager<XxxxxXxxxXxxx, String> pubManager;

@RequestMapping("allXxx")
public @ResponseBody Page<XxxxxXxxxXxxx> logs(){	
	return pubManager.getI(XxxxxXxxxXxxx.class).searchByPage();
}

実行時のClassを取得する必要がある
なんかできるような気がして・・・
汎用DAOの書き方参照
まったくだめだ
人も万用実現ではない
七筋八脈を通すことを求めます~