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

简介:

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

原文地址:https://www.cnblogs.com/yy3b2007com/p/9108598.html