Spring注入泛型类

大家好今天教大家使用Spring框架注入泛型类

问题描述:

在Dao层存在的BookDao与UserDao对数据库进行操作,那么就需要在BookService中使用到不同的Dao对象,Spring使如何区分相同的Dao的不同实现类的呢?

回答是Spring使用到了以泛型作为注入条件自动进行注入,代码描述如下:

bean:

package T.pojo;public class User {}public class Book {}

dao层:

package T.dao;import T.pojo.User;
import org.springframework.stereotype.Repository;@Repository
// 继承BaseDao并带有子类的泛型User
public class UserDao extends BaseDao<User>{@Overridepublic void save() {System.out.println("UserDao Save...");}
}
package T.dao;import org.springframework.stereotype.Repository;@Repository
// 抽象方法定义接口,Spring在查找
public abstract class BaseDao<T> {public abstract void save();
}
package T.dao;import T.pojo.Book;
import org.springframework.stereotype.Repository;@Repository
// 继承BaseDao并带有子类的泛型Book
public class BookDao extends BaseDao<Book>{@Overridepublic void save() {System.out.println("BookDao save ...");}
}
package T.dao;import org.springframework.stereotype.Repository;@Repository
public abstract class BaseDao<T> {public abstract void save();
}

service层:

package T.service;import T.pojo.User;
import org.springframework.stereotype.Service;@Service
// 继承自BaseService,同时自带了属于自己的泛型
public class UserService extends BaseService<User>{}
package T.service;import T.pojo.Book;
import org.springframework.stereotype.Service;@Service
// 继承自BaseService,同时自带了属于自己的泛型
public class BookService extends BaseService<Book>{}
package T.service;import T.dao.BaseDao;
import org.springframework.beans.factory.annotation.Autowired;
// 没有注解!但是它是父类,子类有注解,并不影响Spring进行查找
public class BaseService<T>{@Autowired// 使用泛型自动注入对应的Dao类,泛型声明为User的,就注入UserDao作为子类// 泛型声明为Book的,就注入BookDao作为子类private BaseDao<T> baseDao;public void save(){System.out.println("自动注入Dao:"+baseDao);// 这里还有多态的使用,调用子类save的方法。baseDao.save();}
}

测试:

package T;import T.service.BookService;
import T.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class test {ApplicationContext ioc = new ClassPathXmlApplicationContext("bean6.xml");@Testpublic void test1(){UserService userService= ioc.getBean(UserService.class);BookService bookService = ioc.getBean(BookService.class);userService.save();bookService.save();}
}

需要注意的是:在BaseService中,生成了BaseDao对象,继承自BaseService对象调用save方法时,BaseService会根据子类的泛型使用@Autowired进行注入,「private BaseDao T baseDao」,就完成了注入,然后调用方法。

「private BaseDao T baseDao」这行代码使用多态进行实现。

总结一下就是,使用继承传递泛型参数,Spring根据不同的泛型参数使用@Autowire注入对象。

Spring注入泛型类相关推荐

  1. netty里集成spring注入mysq连接池(一)

    netty的性能非常高,能达到8000rps以上,见 各个web服务器的性能对比测试 1.准备好需要的jar包 spring.jar            //spring包 netty-3.2.4. ...

  2. Spring注入---静态工厂

    在上一篇的博客中我们说Spring注入的一种方式---反射注入.今天我们继续来看一下Spring注入的另外的一种方式---静态的工厂 其实我们的注入,是利用到了配置的文件,当然这种方式的注入有优点也有 ...

  3. spring注入----反射模式

    Spring框架也是刚刚接触,什么IOC控制反转啊,不太清楚,就连一个配置文件都搞的很是糊涂 先说说我遇到的问题吧.最近在看Spring+rabbitmq但是rabbit一个生成者总是配不好,看到网上 ...

  4. FlushMode属性与transaction(spring注入的事务)

    一.参见hibernate的api http://tool.oschina.net/apidocs/apidoc?api=hibernate-3.6.10 http://tool.oschina.ne ...

  5. 尝试用单元测试做spring注入调用service

    尝试用单元测试做spring注入调用service public class GoodsCategoryServiceImplTest extends TestCase{ public Applica ...

  6. Spring 注入集合

    转载自   Spring 注入集合 注入集合 你已经看到了如何使用 value 属性来配置基本数据类型和在你的 bean 配置文件中使用<property>标签的 ref 属性来配置对象引 ...

  7. Spring 注入内部 Beans

    转载自   Spring 注入内部 Beans 注入内部 Beans 正如你所知道的 Java 内部类是在其他类的范围内被定义的,同理,inner beans 是在其他 bean 的范围内定义的 be ...

  8. spring注入私有字段_Spring字段依赖注入示例

    spring注入私有字段 了解如何编写Spring Field Injection示例 . 字段注入是Spring框架 依赖注入的一种 . 在本教程中,我们将编写几个类,并看一看现场注入工程. 有关S ...

  9. 使用Mockito和BeanPostProcessors在Spring注入测试双打

    我非常确定,如果您曾经使用过Spring并且熟悉单元测试,那么您会遇到与您不想修改的Spring应用程序上下文中注入模拟/间谍(测试双打)有关的问题. 本文介绍了一种使用Spring组件解决此问题的方 ...

最新文章

  1. 简易git操作 -- 让你的格子绿起来
  2. File.separator
  3. SAP ME12 修改采购信息记录,系统提示:Condition type P000 does not allow supplementary conditions
  4. pyqt5实战之自定义弹窗口
  5. 内容管理系统 Nuxeo认证绕过和RCE漏洞(CVE-2018-16341) 分析
  6. mqtt客户端_初次接触MQTT
  7. CodeForces - 1313B Different Rules(数学+思维)
  8. 阿里云迎来 2.0,重新定义软件系统应用开发方式
  9. PS 批量导入图片制作 gif
  10. 自协方差函数的Matlab实现
  11. KEIL识别不出野火STM32仿真器问题解决
  12. 广东九联UNT402H-3798-mv300-uwe5621wifi-爱家TV新魔百和刷机固件
  13. 不谋全局者不足以谋一域,不谋万世者不足以谋一时
  14. 简单实用 微信授权登陆(网页版)
  15. 谷粒学院——Day06【整合阿里云OSS、EasyExcel技术实现Excel导入分类】
  16. 讲述建站经历-珍惜网talk888888.com
  17. 谁是中国最大的门户网站??
  18. 2020年美国质量最可靠车型榜单出炉
  19. [TJOI2013]黄金矿工
  20. 用DNS黑洞阻断恶意软件

热门文章

  1. Ehcache配置文件说明
  2. HTTP:header头总结
  3. 五大算法思想(一)分治算法及常见例子
  4. blocking socket 读写返回 EAGAIN
  5. 怎么使用代理IP上网 如何设置代理服务器
  6. Jaccard距离和海明距离
  7. 百度×容联丨“智能来电秘书”亮相:虚拟分身,对话智能,全天待命
  8. 多乐士墙布:墙布门店打破人气僵局!提升流量
  9. tensorflow训练yolov3模型(检测雪人为例,自己的数据和标签,windows环境)
  10. 力扣解法汇总2049-统计最高分的节点数目