场景一:父类应用泛型,当类实例化时通过反射来确定具体类型:
代码:
父类:
@SuppressWarnings("unchecked")
public class BaseServiceImpl<T> implements BaseService<T> {
protected HibernateTemplate hibernateTemplate;
private Class<T> clazz;
@SuppressWarnings("rawtypes")
public BaseServiceImpl(){
//子类实例化时,调用super();运行父类构造函数。所以this代表具体子类。
ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
clazz = (Class)type.getActualTypeArguments()[0];
}
public void setHibernateTemplate(HibernateTemplate hibernamteTemplate){
this.hibernateTemplate = hibernamteTemplate;
}
子类:
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService{
public List<User> queryByName(String uname){
List<User> l = hibernateTemplate.find("from User where name like '%"+uname+"%'");
return l;
}
}
spring配置:
<bean id="userService" class="com.dx.impl.UserServiceImpl" parent="baseService"></bean>
<bean id="baseService" class="com.dx.impl.BaseServiceImpl" lazy-init="true">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>
注意:1.通过添加属性lazy-init=”true”实现懒加载。
2.当bean中有继承关系时,需配置paraent属性,否则调用父类属性和方法是报错。