泛型依赖注入

定义父类时,使用泛型指定某种类型,并在父类中使用依赖注入,在子类继承父类后,在子类中指定具体的泛型的具体类型,并且子类会继承父类的依赖注入。如果父类依赖注入的是某个接口或父类,那么在子类继承父类的依赖注入后,会自动注入接口的实现类或父类的继承子类;如果父类依赖注入的是某个独立的类,那么子类继承父类的依赖注入后,也会注入这个独立类。下面示例演示

1、创建两个父类BaseDao和BaseService,两个父类中使用泛型,并在BaseService中依赖注入BaseDao。

BaseDao类:

package com.lzj.spring.generic;

/*使用泛型*/
public class BaseDao<T> {
    public void select(T variable){
        System.out.println("select:" + variable);
    }
}

BaseService类:

package com.lzj.spring.generic;
import org.springframework.beans.factory.annotation.Autowired;

/*使用泛型*/
public class BaseService<T> {

    /*指定依赖注入,供子类来继承*/
    @Autowired
    private BaseDao<T> dao;

    public void update(T entity){
        System.out.println("update:" + entity);
        dao.select(entity);
    }
}

2、创建UserDao和UserService两个子类分别实现BaseDao和BaseService父类。

UserDao类:

package com.lzj.spring.generic;
import org.springframework.stereotype.Repository;

/*在子类中指定泛型的具体类型,并把该类的bean注入到IOC容器中*/
@Repository
public class UserDao extends BaseDao<User> {

}

UserService类:

package com.lzj.spring.generic;
import org.springframework.stereotype.Service;

/*在子类中指定泛型的具体类型,并把该类的bean注入到IOC容器中*/
@Service
public class UserService extends BaseService<User> {

}

UserService 类继承了BaseService类,同时也把BaseService中的依赖注入关系继承过来了。@Autowired private BaseDao<T> dao;在BaseService实例中获取的dao是注入的BaseDao的子类的bean。

User类:

package com.lzj.spring.generic;

public class User {

}

3、在配置文件bean.xml中配置扫描范围:

<context:component-scan base-package="com.lzj.spring.generic"></context:component-scan>

4、创建测试类:

package com.lzj.spring.generic;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
        UserService userService = (UserService) ctx.getBean("userService");
        userService.update(new User());
    }

}

输出结果:

update:com.lzj.spring.generic.User@1a8a8f7c
select:com.lzj.spring.generic.User@1a8a8f7c

从输出结果可以看出,在IOC容器中有UserService和UserDao两个子类对应的bean,UserDao的bean注入到了UserService的bean中,因此UserService在继承父类BaseDao时,同时用把依赖注入关系继承过来了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值