Spring 4.x中可以为子类注入子类对应的泛型类型的成员变量的引用

BaseService<T>:有RoleService和UserService两的子类

BaseRepepositry<T>:有UserRepository和RoleRepositry两个子类

由于 BaseService<T>和 BaseRepepositry<T> 有关系所以,得出下面的子类也存在这样的关系

package generic.di; 

public class BaseRepository<T> { } 

————————————————————————————————————————————————————————————————————————————————————————————————————————————————
package generic.di; import org.springframework.beans.factory.annotation.Autowired; public class BaseService<T> { @Autowired
protected BaseRepository<T> repository; public void add() {
System.out.println("add");
System.out.println(repository);
}
}
package generic.di;

import org.springframework.stereotype.Repository;

@Repository
public class RoleRepository extends BaseRepository<Organization> {
}

—————————————————————————————————————————————————————————————————————————————————————————————————————————————— package generic.di;
import org.springframework.stereotype.Service; @Service
public class RoleService extends BaseService<Organization> {
}

——————————————————————————————————————————————————————————————————————————————————————————————————————————————
package generic.di; public class Organization {
}
package generic.di;

public class User {
}
——————————————————————————————————————————————————————————————————————————————————————————————————————————————
package generic.di; import org.springframework.stereotype.Repository; @Repository
public class UserRepository extends BaseRepository<User> { } ——————————————————————————————————————————————————————————————————————————————————————————————————————————————
package generic.di; import org.springframework.stereotype.Service; @Service
public class UserService extends BaseService<User> {
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="generic.di">
</context:component-scan>
</beans>
package generic.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("generic/di/15-1.xml");
UserService userService = (UserService) ctx.getBean("userService");
RoleService roleService = (RoleService) ctx.getBean("roleService");
userService.add();
roleService.add();
}
}

aaarticlea/png;base64,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" alt="" />

15Spring泛型依赖注入的更多相关文章

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

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

  2. Spring(十六):泛型依赖注入

    简介: Spring4.X之后开始支持泛型依赖注入. 使用示例: 1.定义实体 package com.dx.spring.bean.componentscan; import java.io.Ser ...

  3. Spring的泛型依赖注入

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

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

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

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

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

  6. Autofac 泛型依赖注入

    using Autofac;using Autofac.Extensions.DependencyInjection;using Hangfire;using Microsoft.AspNetCore ...

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

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

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

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

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

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

随机推荐

  1. spring 获取配置文件的值

    Spring 获取配置文件的值 package com.hafiz.www.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; ...

  2. Ubuntu install and uinstall

    一.Ubuntu中软件安装方法 1.APT方式 (1)普通安装:apt-get install softname1 softname2 -; (2)修复安装:apt-get -f install so ...

  3. 图论/暴力 Codeforces Beta Round #94 (Div. 2 Only) B. Students and Shoelaces

    题目传送门 /* 图论/暴力:这是个连通的问题,每一次把所有度数为1的砍掉,把连接的点再砍掉,总之很神奇,不懂:) */ #include <cstdio> #include <cs ...

  4. js中实现json格式的转换

    function person(id,name,age){ this.id=id; this.name=name; this.age=age; } var p=new person(1001,'tom ...

  5. 转 SQL - 字符串中的转义字符

    一位同事在使用SQL处理一串字符时,出现一个意料之外的问题:这个字符串中包括字符‘&’.我们先看一下现象:     SQL> select * from v$version;     B ...

  6. dockerfile构建的镜像

    转载请注明出处 https://www.cnblogs.com/majianming/p/9536975.html 在每执行一个命令时,便会commit形成一个层,最后形成堆栈式的结构.最后的镜像是各 ...

  7. 死磕 java魔法类之Unsafe解析

    问题 (1)Unsafe是什么? (2)Unsafe只有CAS的功能吗? (3)Unsafe为什么是不安全的? (4)怎么使用Unsafe? 简介 本章是java并发包专题的第一章,但是第一篇写的却不 ...

  8. FreeMarker-网页静态化

    网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同,缓存比较适合小规 ...

  9. vue-router之 beforeRouteEnter

    beforeRouteEnter在每次路由切换都执行 ,而项目优化后,切换路由mounted只在最开始执行一次 beforeRouteEnter的具体用法可参考官方文档 https://cn.vuej ...

  10. orcale 数据库的一些知识

    最近学了一些Oracle数据库的知识,我想自己整理一下,以后也方便自己查阅的. orcale 数据库登录(tiger) 1. sql plus 登录 用户名: sys 口令: 主机字符串:orcl a ...