Spring-IoC-DI-基于注解方式的依赖注入-(案例七:泛型依赖注入)
案例八:泛型依赖注入
(1)编写类
以书城项目为例
UserDao
@Repository public class UserDao { public void add() { System.out.println("userDao add"); } }
UserService
@Service public class UserService { @Autowired private UserDao userDao; public void add() { System.out.println("UserService add"); userDao.add(); } }
BookDao
@Repository public class BookDao { public void add() { System.out.println("BookDao add "); } }
BookService
@Service public class BookService { @Autowired private BookDao bookDao; public void add() { System.out.println("BookService add"); bookDao.add(); } }
(2)开启组件扫描
<context:component-scan base-package="com.orz.spring"/>
(3)测试
@Test
public void test1() {
ConfigurableApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
UserService userService = applicationContext.getBean("userService", UserService.class);
userService.add();
BookService bookService = applicationContext.getBean("bookService", BookService.class);
bookService.add();
}
(4)结果
UserService add
userDao add
BookService add
BookDao add
(5)我们发现可以抽取公共部分形成BaseDao<T>、BaseService<T>
BaseDao public abstract class BaseDao <T>{ public abstract void add(); }
BookDao
@Repository public class BookDao extends BaseDao<Book>{ @Override public void add() { System.out.println("BookDao add "); } }
UserDao
@Repository
public class UserDao extends BaseDao<User>{
@Override
public void add()
{
System.out.println("userDao add");
}
}
BaseService
public class BaseService <T> {
@Autowired
BaseDao<T> baseDao;
public void add()
{
baseDao.add();
}
}
BookService
@Service public class BookService extends BaseService<Book>{ }
UserService
@Service
public class UserService extends BaseService<User>{
}
(6)测试
@Test public void test1() { ConfigurableApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml"); UserService userService = applicationContext.getBean("userService", UserService.class); userService.add(); BookService bookService = applicationContext.getBean("bookService", BookService.class); bookService.add(); }
(7)结果
userDao add
BookDao add
(8)原理


浙公网安备 33010602011771号