需求: 做一个通用的方法,把service和实体类传进去,能够根据这个service去查一次数据库。
public Object encolseModel(Class object, Service service,ProceedingJoinPoint proceedingJoinPoint){
object = (Class)proceedingJoinPoint.getArgs()[0];
if (object != null) {
object = service.findById(object.get());
}
return object;
}
写到这里有点懵比
代码需要实现:
1.把【proceedingJoinPoint.getArgs()[0];】强制转换成某个实体类,比如Employee;
2.通过service,去数据库中查询出某个数据,返回object,
这是源代码,怎么把这段代码做的有通用性?
TblEmp tblEmp = (TblEmp) proceedingJoinPoint.getArgs()[0];
if (tblEmp != null) {
tblEmp = tblEmpService.findById(tblEmp.getEmpId());
}
使用接口
http://blog.csdn.net/stzy00/article/details/40078325
package com.my.test.entity;
import java.io.Serializable;
/**
@author LiuKun 主键类型
*/
public interface Entity {
/**
}
package com.my.test.entity;
/**
*/
public class Student implements Entity {
private String id;// 编号
private String name;// 姓名
// ..........省略...........
public String getPk() {
return getId();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.my.test.entity;
/**
*/
public class Teacher implements Entity {
private Integer id;// 编号
private String name;// 姓名
// ..........省略...........
public Integer getPk() {
return getId();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.my.test.service;
import java.io.Serializable;
import com.my.test.entity.Entity;
/**
*/
public interface Service> {
/**
import com.my.test.entity.Student;
/**
*/
public class StudentService implements Service {
/**
}
package com.my.test.service;
import com.my.test.entity.Teacher;
/**
*/
public class TeacherService implements Service {
/**
}
package com.my.test.interceptor;
import java.io.Serializable;
import org.aspectj.lang.ProceedingJoinPoint;
import com.my.test.service.Service;
/**
*/
public class EncloseInterceptor {
public Object encloseModel(Class object, Service service,
ProceedingJoinPoint proceedingJoinPoint) {
// 获取主键
java.io.Serializable pk = (Serializable) proceedingJoinPoint.getArgs()[0];
Object entity = service.findById(pk);
return entity;
}
}
你上面的代码和泛型没啥关系吧。
按你说的可能是这样改:
public <T> encolseModel(<T> object, Service service,ProceedingJoinPoint proceedingJoinPoint){
object = (T)proceedingJoinPoint.getArgs()[0];
if (object != null) {
object = service.findById(object.getId());
}
return object;
}