在前面的笔记中,我已经详细为大家介绍了如何通过配置文件和注解将 bean 注入 ioc 容器,可以发现,使用注解开发能节省好多好多时间,现在的主流也是使用注解进行开发,但是如果我们不先了解最开始的xml文件配置,后面使用注解也不清楚它的巨大好处,更何况现在依然会使用 xml 进行 bean 的配置(主要是针对一些插件的注入和三方框架的整合)
  • 接下来为大家介绍 spring4.0 就推出的超级强大的泛型依赖注入
强大的泛型依赖注入
  • 我们在之前的开发中,都会将通用的数据库操作封装在一个 BaseDao父类中,然后通过 BaseService 父类进行调用,通过泛型确定 不同的 BaseService 和 BaseDao 子类,整个步骤相当繁琐,但是如果使用 spring 为我们提供的泛型依赖注入就会大大提高开发效率
  • 我们先来看一端代码,然后做出解释
- 定义父类

public class BaseDao<T> {

}

public class BaseService<T> {

    @Autowired
    protected BaseDao<T> baseDao;

    public void say() {
        System.out.println("baseService.....");
        System.out.println(baseDao);
    }
}

- 定义javaBean

public class User {

}

- 定义子类

@Repository
public class UserDao<User> extends BaseDao<User>{

}

@Service
public class UserService<User> extends BaseService<User> {

}

- 测试

public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans-genericDI.xml");
        UserService<User> bean = (UserService<User>) context.getBean("userService");
        bean.say();
    }

console:

  • 现在开始解释:
  1. BaseDao 定义通用的数据库操作,BaseService 定义通用的业务逻辑,在 BaseService 中通过注解注入 BaseDao(BaseService的子类将会自动注入这个子类对应的泛型类型的成员变量的引用)
  2. UserService 继承 BaseService,UserDao 继承 BaseDao,将这两个类交给 ioc 容器管理,IOC 容器注入 UserService 这个bean 实例的时候 自动注入对应的 userDao 这个bean 实例的引用(当我们调用 userService 的方法的时候(实际是继承父类的say()方法),可以清楚的发现)