您的位置:首页 > 编程语言 > Java开发

Spring中的泛型依赖注入简单实现

2020-07-18 04:54 363 查看

Spring中的泛型依赖注入简单实现

Spring中的泛型依赖注入是Spring4.0新添加的功能,下面通过几个实例来演示这个功能。

首先创建

Book
User
类,无内容,创建过程省略。
然后创建
BaseDao
接口

public interface BaseDao<T> {
public abstract void save();
}

创建

BookDao
UserDao
两个类实现
BaseDao
接口

@Repository
public class BookDao implements BaseDao<Book>{

@Override
public void save() {
System.out.println("BookDao...save()...");
}
}
@Repository
public class UserDao implements BaseDao<User> {

@Override
public void save() {
System.out.println("UserDao...save()...");
}
}

Book
User
两个类创建Service层对象

@Service
public class BookService {
@Autowired
private BookDao bookDao;

public void save() {
System.out.println("这里是BookService,正在调用BookDao方法");
bookDao.save();
}
}
@Service
public class UserService {
@Autowired
private UserDao userDao;

public void save() {
System.out.println("这里是UserService,正在调用UserDao方法");
userDao.save();
}
}

Service
层中使用了
@Autowired
来实现自动装配,经过测试

@Test
public void test() {
ApplicationContext ac = new ClassPathXmlApplicationContext("ioc.xml");
BookService bean1 = ac.getBean(BookService.class);
UserService bean2 = ac.getBean(UserService.class);

bean1.save();
bean2.save();
}

得到结果

这里是BookService,正在调用BookDao方法
BookDao...save()...
这里是UserService,正在调用UserDao方法
UserDao...save()...

可以发现,Bean对象完成了自动装配。

BookDao
UserDao
都实现了同一个接口
BaseDao
,那么我们可不可以通过
BaseDao
来完成自动装配呢?

我们新创建一个

BaseService
类,并且对
BookService
UserService
进行改造

public class BaseService<T> {
@Autowired
private BaseDao<T> baseDao;

public void save() {
System.out.println("自动注入的Service,正在调用Dao方法");
baseDao.save();
}
}
@Service
public class BookService extends BaseService<Book>{

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

}

重新进行测试,得到结果

自动注入的Service,正在调用Dao方法
BookDao...save()...
自动注入的Service,正在调用Dao方法
UserDao...save()...

可以看到,在调用

Dao
层方法的时候,虽然没有明确类型,但是Spring依然根据
Service
层中的泛型完成了依赖注入。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: