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)原理