在前面的笔记中,我已经详细为大家介绍了如何通过配置文件和注解将 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:
现在开始解释:
BaseDao 定义通用的数据库操作,BaseService 定义通用的业务逻辑,在 BaseService 中通过注解注入 BaseDao(BaseService的子类将会自动注入这个子类对应的泛型类型的成员变量的引用)
UserService 继承 BaseService,UserDao 继承 BaseDao,将这两个类交给 ioc 容器管理,IOC 容器注入 UserService 这个bean 实例的时候 自动注入对应的 userDao 这个bean 实例的引用(当我们调用 userService 的方法的时候(实际是继承父类的say()方法),可以清楚的发现)