泛型依赖注入允许我们在使用spring进行依赖注入的同时,利用泛型的优点对代码进行精简,将可重复使用的代码全部放到一个类之中,方便以后的维护和修改。同时在不增加代码的情况下增加代码的复用性。
下面的对泛型注入进行演示:
假设有用户User和图书Book两个Bean,用户和图书都有一个保存方法,那么可以将这个方法提取出来,作为一个泛型接口。同样的,在Spring中也支持对这样的泛型进行依赖注入。
业务层
- 业务层定义一个
泛型父类
,BookService和UserService分别继承BaseService<Book>
和BaseService<User>
- 在这个
泛型父类
中有一个save方法,并在此方法中调用持久层
public class BaseService<T> {
@Autowired
BaseDao<T> baseDao;
public void save() {
baseDao.save();
}
}
@Service
public class BookService extends BaseService<Book> {
}
@Service
public class UserService extends BaseService<User> {
}
持久层
- 持久层定义一个
泛型抽象类
,BookDao 和 UserDao 分别继承BaseDao<Book>
和BaseDao<User>
- 在这个
泛型抽象类
中定义了抽象save方法,并分别在其子类中重载了此方法,进行个性化。
public abstract class BaseDao<T> {
public abstract void save();
}
@Repository
public class BookDao extends BaseDao<Book> {
@Override
public void save() {
System.out.println("保存图书中...");
}
}
@Repository
public class UserDao extends BaseDao<User> {
@Override
public void save() {
System.out.println("保存用户中...");
}
}
Spring测试:
@ContextConfiguration("classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class iocTest {
@Autowired
BookService bookService;
@Autowired
UserService userService;
@Test
public void test() {
bookService.save();
userService.save();
}
}