简介:

Spring4.X之后开始支持泛型依赖注入。

使用示例:

1、定义实体

package com.dx.spring.bean.componentscan;

import java.io.Serializable;

public class Member implements Serializable {
private static final long serialVersionUID = -7106886149424419957L; }
package com.dx.spring.bean.componentscan;

import java.io.Serializable;

public class Role implements Serializable{
private static final long serialVersionUID = 514142692576163383L; }

2、定义基础仓库

package com.dx.spring.bean.componentscan;

import java.io.Serializable;

public class BaseRepository<T extends Serializable> {
public void add() {
System.out.println("BaseRepository add");
}
}

3、定义基础服务层

package com.dx.spring.bean.componentscan;

import java.io.Serializable;

import org.springframework.beans.factory.annotation.Autowired;

public class BaseService<T extends Serializable> {
@Autowired
protected BaseRepository<T> baseRepository; public void add() {
System.out.println("BaseService add ");
}
}

4、定义仓库服务层

package com.dx.spring.bean.componentscan;

import org.springframework.stereotype.Repository;

@Repository
public class MemberRepositoryImpl extends BaseRepository<Member> {
@Override
public void add() {
System.out.println("Add");
}
}
package com.dx.spring.bean.componentscan;

import org.springframework.stereotype.Repository;

@Repository
public class RoleRepositoryImpl extends BaseRepository<Role> { }

5、定义Member/Role服务层

package com.dx.spring.bean.componentscan;

import org.springframework.stereotype.Service;

@Service
public class MemberServiceImpl extends BaseService<Member> {
@Override
public void add() {
System.out.println(baseRepository);
super.add();
}
}
package com.dx.spring.bean.componentscan;

import org.springframework.stereotype.Service;

@Service
public class RoleServiceImpl extends BaseService<Role> {
@Override
public void add() {
System.out.println(baseRepository);
super.add();
}
}

6、测试类

package com.dx.spring.bean.componentscan;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Client {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean-component-scan2.xml");
MemberServiceImpl memberService = (MemberServiceImpl) ctx.getBean("memberServiceImpl");
memberService.add(); RoleServiceImpl roleServiceImpl = (RoleServiceImpl) ctx.getBean("roleServiceImpl");
roleServiceImpl.add();
}
}

打印日志:

com.dx.spring.bean.componentscan.MemberRepositoryImpl@530612ba
BaseService add
com.dx.spring.bean.componentscan.RoleRepositoryImpl@2a40cd94
BaseService add

Spring(十六):泛型依赖注入的更多相关文章

  1. Spring初学之泛型依赖注入

    主要讲泛型依赖注入,所以核心在java文件,配置文件中只需配置扫描包即可,如下: <?xml version="1.0" encoding="UTF-8" ...

  2. Spring第六弹—-依赖注入之使用构造器注入与使用属性setter方法注入

    所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中. 使用构造器注入   1 2 3 4 <constructor-arg index=“0” type=“java.lang. ...

  3. Spring基础—— 泛型依赖注入

    一.为了更加快捷的开发,为了更少的配置,特别是针对 Web 环境的开发,从 Spring 4.0 之后,Spring 引入了 泛型依赖注入. 二.泛型依赖注入:子类之间的依赖关系由其父类泛型以及父类之 ...

  4. Spring的泛型依赖注入

    Spring 4.x 中可以为子类注入子类对应的泛型类型的成员变量的引用,(这样子类和子类对应的泛型类自动建立关系)具体说明: 泛型注入:就是Bean1和Bean2注入了泛型,并且Bean1和Bean ...

  5. 【串线篇】spring泛型依赖注入原理

    spring泛型依赖注入原理 不管三七二十一 servlet :加注解@servlet service:加注解@service dao:加注解@Repository 这相当于在容器中注册这些个类

  6. Spring新特性_泛型依赖注入

    泛型依赖注入 package com.tanlei.spring.generic; import org.springframework.beans.factory.annotation.Autowi ...

  7. 转载--浅谈spring4泛型依赖注入

    转载自某SDN-4O4NotFound Spring 4.0版本中更新了很多新功能,其中比较重要的一个就是对带泛型的Bean进行依赖注入的支持.Spring4的这个改动使得代码可以利用泛型进行进一步的 ...

  8. Spring4学习回顾之路10-Spring4.x新特性:泛型依赖注入

    泛型依赖注入:Spring 4.x中可以为子类注入子类对应的泛型类型的成员变量的引用. 话语太过抽象,直接看代码案例,依次建立如下代码: User.java package com.lql.sprin ...

  9. (转)Spring读书笔记-----Spring核心机制:依赖注入

    Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的.因此,我们说这些对象间存在依赖关系.加入A组件调用了B组件的方法,我们就 ...

随机推荐

  1. Sed&awk笔记之sed篇(转)

    Sed是什么 <sed and awk>一书中(1.2 A Stream Editor)是这样解释的: Sed is a "non-interactive" strea ...

  2. C#——性能计数器

    简要Windows性能监视器: 打开Windows性能监视器的步骤如下: 开始→运行→perfmon→确定 在这里我们可以选择添加我们要监控的计数器,比如:cpu使用率.内存使用量等,作为asp.ne ...

  3. .net加载失败的程序集重新加载

    在.net程序中,程序集是Lazy加载的,只有在用的时候才会去加载,当程序集加载失败时,会触发AppDomain.AssemblyResolve的事件,在这个事件中,我们甚至还可以进行补救,从别得地方 ...

  4. [SQL ERROR 800]Corresponding types must be compatible in CASE expression.

    SQL应用报错800.Corresponding types must be compatible in CASE expression. 错误描述: 11:00:51  [SELECT - 0 ro ...

  5. 液晶电视插有线电视信号线的是哪个接口 HDMI是什么接口

    1.液晶电视插有线电视信号线的接口(模拟信号)是射频接口(也叫RF接口,同轴电缆接口,闭路线接口),数字信号就得通过机顶盒转换成模拟信号视频输出至电视,才能正常收看电视节目. 2.电视机或高清机顶盒上 ...

  6. delphi 游戏

    http://www.cnblogs.com/devlyn/archive/2010/08/24/1807190.html

  7. 使用Edge模式通知Internet Explorer以最高级别的可用模式显示内容

    一.EasyUI$的window('open')在IE8下兼容性问题 今天在公司使用EasyUI的$('#win').window('open');方法打开一个window窗体时发现EaysUI的脚本 ...

  8. C++ 实践总结

     对于一个应用程序而言,静态链接库可能被载入多次,而动态链接库仅仅会被载入一次. Gameloft面试之错误一 Event: 面试官说例如以下程序是能够链接通过的. class Base { Pu ...

  9. 架构:The Onion Architecture : part 3(洋葱架构:第三篇)(转载)

    In my previous installments, I described what has become my approach to defining the architecture fo ...

  10. Unity动画知识之二:Animator动画状态机

    上次我们讲过Unity游戏动画从入门到住院,今天我们来讲一下动画状态机. 好了,现在我们已经成功的导入了动画.接下来要玩的东西就很装13啦.因为大部分动画师是用不到这家伙的,需要掌握这个技能的,至少也 ...