抽取出的BaseService,以及实现类中调用的原理
来源:互联网 发布:cf网络异常重新登录 编辑:程序博客网 时间:2024/05/20 16:35
有些公用的方法,不用去每一个都去实现类中写对应的方法。
package com.cris.scm.service.impl;import java.lang.reflect.Field;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import javax.annotation.PostConstruct;import org.springframework.beans.factory.annotation.Autowired;import com.cris.scm.dao.AccountMapper;import com.cris.scm.dao.BaseMapper;import com.cris.scm.dao.SupplierMapper;import com.cris.scm.entity.Page;import com.cris.scm.service.BaseService;public class BaseServiceImpl<T> implements BaseService<T> {protected BaseMapper<T> basedao;@Autowiredprivate SupplierMapper supplierdao;@Autowiredprivate AccountMapper accountdao;@PostConstruct//在构造方法执行之后执行private void initBaseMapper() throws Exception{//完成以下逻辑,需要对研发本身进行命名与使用规范//this关键字指对象本身,这里指的是调用此方法的实现类(子类)System.out.println("==========this-->"+this);System.out.println("======父类的基本信息-->"+this.getClass().getSuperclass());System.out.println("父类和泛型的信息-->"+this.getClass().getGenericSuperclass());//得到父类的泛型信息ParameterizedType type=(ParameterizedType) this.getClass().getGenericSuperclass();//获取第一个参数的class//Type typetmp[]=type.getActualTypeArguments();//拿到尖括号里面的泛型,因为不止一个,所以是数组//for(Type tmp:typetmp){//System.out.println(tmp);//}Class clazz=(Class) type.getActualTypeArguments()[0];//得到泛型 com.cris.scm.entity.具体的pojoSystem.out.println("====第一个参数的class"+clazz);//转化为属性名,第一个字母转成小写//com.cris.scm.entity.Supplier.class->supplier+daoString localField=clazz.getSimpleName().substring(0,1).toLowerCase()+clazz.getSimpleName().substring(1)+"dao";//例如 basedaoSystem.out.println("=======localString-->"+localField);//getDeclaredField 获得所有属性,包括私有和保护//通过下面的方法获得到父类的声明属性Field field=this.getClass().getSuperclass().getDeclaredField(localField);//例如,得到supplierdao属性System.out.println("=====field-->"+field);System.out.println("=====field对应的对象-->"+field.get(this));//得到一个代理对象,代理这个SupplierMapper接口//supplierserviceimpl引用的是一个代理对象?org.apache.ibatis.binding.MapperProxy@367970fa//得到父类的basedao属性Field baseField=this.getClass().getSuperclass().getDeclaredField("basedao");System.out.println("baseField"+baseField);System.out.println("=====baseField对应的对象-->"+baseField.get(this));//field.get(this)获取当前this的field字段的//值。例如:Supplier对象中,baseMapper所指向//的对象为其子类型SupplierMapper对象,子类型对象//已被spring实例化于容器中baseField.set(this, field.get(this));//把basedao的引用,设置到去引用supplierdao指向的堆内存//后面basedao实际上指向的是SupplierMapper的代理对象在堆内存的实际存在System.out.println("baseField对应的对象-->"+baseField.get(this));//org.apache.ibatis.binding.MapperProxy@367970fa}@Overridepublic T selectById(int pk) throws Exception {// TODO Auto-generated method stubreturn basedao.selectById(pk);}@Overridepublic int deleteById(T entity) throws Exception {// TODO Auto-generated method stubreturn basedao.deleteById(entity);}@Overridepublic int deleteByIds(int[] ids) throws Exception {// TODO Auto-generated method stubreturn basedao.deleteByIds(ids);}@Overridepublic int insert(T entity) throws Exception {// TODO Auto-generated method stubreturn basedao.insert(entity);}@Overridepublic int update(T entity) throws Exception {// TODO Auto-generated method stubreturn basedao.update(entity);}@Overridepublic Page<T> selectPage(Page<T> page) {// TODO Auto-generated method stubpage.setList(basedao.selectPageList(page));page.setTotalRecords(basedao.selectPageCount(page));return page;}@Overridepublic Page<T> selectPageMulti(Page<T> page) {// TODO Auto-generated method stubpage.setList(basedao.selectPageListMulti(page));page.setTotalRecords(basedao.selectPageCountMulti(page));return page;}}
0 0
- 抽取出的BaseService,以及实现类中调用的原理
- CRM-BaseService的抽取
- BaseService --- service层的抽取
- 在spring中使用通用Mapper,抽象出通用的业务类BaseService<T>
- extjs3.3.1中继承实现代码的抽取和调用
- 从批处理文件中抽取作业号以及所有调用的JAVA CLASS名
- 抽取通用开发BaseService
- Java中ThreadLocal类的作用以及实现原理
- Java中ThreadLocal类的作用以及实现原理
- Java中ThreadLocal类的作用以及实现原理
- Java中ThreadLocal类的作用以及实现原理
- Java中ThreadLocal类的作用以及实现原理
- v8中js创建以及调用c++类的实现
- 从批处理文件中抽取作业号以及所有调用的JAVA CLASS名--AWK处理不周,DEBUG
- 关于数据增量抽取的模拟实现——原理
- BaseService类
- ListView的优化使用-抽取ViewHolder以及adapter类
- 安卓RecyclerView的使用以及抽取基类
- win7 32bit python2.7 python manage.py syncdb -> No module named MySQLdb
- Ubuntu解压缩zip,tar,tar.gz,tar.bz2
- 约瑟夫环问题
- salt key用法
- leetocde-Maximum Depth of Binary Tree
- 抽取出的BaseService,以及实现类中调用的原理
- Linux进程间套接字(Socket)通信
- ActiveMQ 使用场景
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- 二叉树的非递归遍历操作
- ionic环境搭建
- Head First Servlet&Jsp 学习笔记(一) 一些基础知识
- javascript变量声明提升(hoisting)
- Ubuntu Server安装图形界面