使用Struts2時(shí)做CRUD時(shí),每個(gè)action都需要寫相同重復(fù)的代碼,于是就想著將這些個(gè)代碼放到一個(gè)父類中,子類直接使用父類中的方法。
但是由于保存的時(shí)候需要傳遞一個(gè)具體的實(shí)體,而每個(gè)action功能不一樣,傳遞的實(shí)體也不一樣,于是就想到了反射。
子類:
public class UserAction extends BaseAction<User> {}父類
public abstract class BaseAction<T> extends ActionSupport implements RequestAware, ModelDriven<T> {PRotected Map<String, Object> request; protected Long id; private Class<T> clazz = null; public BaseAction() { // TODO Auto-generated constructor stub ParameterizedType pt = (ParameterizedType) this.getClass() .getGenericSuperclass(); //獲取泛型類型數(shù)組 this.clazz = (Class<T>) pt.getActualTypeArguments()[0]; //獲取泛型類型 } protected T model; @Override public T getModel() { //通過(guò)傳入不同的泛型類型,獲取具體的實(shí)例 try { model = clazz.newInstance(); } catch (Exception e) { throw new RuntimeException(e); } if (id != null) { if (model instanceof Department) { model = (T) departmentService.getById(id); } else if (model instanceof Role) { model = (T) roleService.getById(id); } else if (model instanceof User) { model = (T) userService.getById(id); } else if (model instanceof Privilege) { model = (T) privilegeService.getById(id); } } return model; } @Override public void setRequest(Map<String, Object> arg0) { request = arg0; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Resource protected IDepartmentService departmentService; @Resource protected IRoleService roleService; @Resource protected IUserService userService; @Resource protected iprivilegeService privilegeService;}新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注