泛型依赖注入

来源:互联网 发布:淘宝蓝海选品软件 编辑:程序博客网 时间:2024/05/28 15:59

说明:spring 4.x 后允许子类注入子类对应带泛型类型的成员变量的引用,说白了就是任何实现了xxService<T> 类的子类(明确了泛型类型)例如:xxService<User>,都可以被xxService<T>这个父类接受,即由spring 注入给这个父类。

举例:

User.java

package com.yaspeed.spring.beans.generic.di;public class User {}


泛型类 BaseRepository<T>

package com.yaspeed.spring.beans.generic.di;public class BaseRepository<T> {}

泛型类BaseService<T>  有个成员变量,类型为BaseRepository<T> , 任何实现了BaseRepository<T>的子类,例如BaseRepository extends BaseRepository<User> 指定了泛型类型,即子类BaseReposiotry可以放入spring容器,然后注入给BaseRepository<T>类型的变量。

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

将UserRepository 子类和UserService 子类放入spring容器中

package com.yaspeed.spring.beans.generic.di;import org.springframework.stereotype.Repository;@Repositorypublic class UserRepository extends BaseRepository<User>{}

package com.yaspeed.spring.beans.generic.di;import org.springframework.stereotype.Service;@Servicepublic class UserService extends BaseService<User>{}

测试方法:子类UserRepository 注入给了BaseRepository<T>类型的变量

package com.yaspeed.spring.beans.generic.di;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext cxt = new ClassPathXmlApplicationContext("beans-generic-di.xml");UserService userService = (UserService) cxt.getBean("userService");System.out.println(userService);userService.add();}}









0 0
原创粉丝点击