Spring注入泛型类
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注入泛型类相关推荐
- netty里集成spring注入mysq连接池(一)
netty的性能非常高,能达到8000rps以上,见 各个web服务器的性能对比测试 1.准备好需要的jar包 spring.jar //spring包 netty-3.2.4. ...
- Spring注入---静态工厂
在上一篇的博客中我们说Spring注入的一种方式---反射注入.今天我们继续来看一下Spring注入的另外的一种方式---静态的工厂 其实我们的注入,是利用到了配置的文件,当然这种方式的注入有优点也有 ...
- spring注入----反射模式
Spring框架也是刚刚接触,什么IOC控制反转啊,不太清楚,就连一个配置文件都搞的很是糊涂 先说说我遇到的问题吧.最近在看Spring+rabbitmq但是rabbit一个生成者总是配不好,看到网上 ...
- FlushMode属性与transaction(spring注入的事务)
一.参见hibernate的api http://tool.oschina.net/apidocs/apidoc?api=hibernate-3.6.10 http://tool.oschina.ne ...
- 尝试用单元测试做spring注入调用service
尝试用单元测试做spring注入调用service public class GoodsCategoryServiceImplTest extends TestCase{ public Applica ...
- Spring 注入集合
转载自 Spring 注入集合 注入集合 你已经看到了如何使用 value 属性来配置基本数据类型和在你的 bean 配置文件中使用<property>标签的 ref 属性来配置对象引 ...
- Spring 注入内部 Beans
转载自 Spring 注入内部 Beans 注入内部 Beans 正如你所知道的 Java 内部类是在其他类的范围内被定义的,同理,inner beans 是在其他 bean 的范围内定义的 be ...
- spring注入私有字段_Spring字段依赖注入示例
spring注入私有字段 了解如何编写Spring Field Injection示例 . 字段注入是Spring框架 依赖注入的一种 . 在本教程中,我们将编写几个类,并看一看现场注入工程. 有关S ...
- 使用Mockito和BeanPostProcessors在Spring注入测试双打
我非常确定,如果您曾经使用过Spring并且熟悉单元测试,那么您会遇到与您不想修改的Spring应用程序上下文中注入模拟/间谍(测试双打)有关的问题. 本文介绍了一种使用Spring组件解决此问题的方 ...
最新文章
- 简易git操作 -- 让你的格子绿起来
- File.separator
- SAP ME12 修改采购信息记录,系统提示:Condition type P000 does not allow supplementary conditions
- pyqt5实战之自定义弹窗口
- 内容管理系统 Nuxeo认证绕过和RCE漏洞(CVE-2018-16341) 分析
- mqtt客户端_初次接触MQTT
- CodeForces - 1313B Different Rules(数学+思维)
- 阿里云迎来 2.0,重新定义软件系统应用开发方式
- PS 批量导入图片制作 gif
- 自协方差函数的Matlab实现
- KEIL识别不出野火STM32仿真器问题解决
- 广东九联UNT402H-3798-mv300-uwe5621wifi-爱家TV新魔百和刷机固件
- 不谋全局者不足以谋一域,不谋万世者不足以谋一时
- 简单实用 微信授权登陆(网页版)
- 谷粒学院——Day06【整合阿里云OSS、EasyExcel技术实现Excel导入分类】
- 讲述建站经历-珍惜网talk888888.com
- 谁是中国最大的门户网站??
- 2020年美国质量最可靠车型榜单出炉
- [TJOI2013]黄金矿工
- 用DNS黑洞阻断恶意软件