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

 

 

 

 
posted @ 2020-10-21 23:55  orz江小鱼  阅读(113)  评论(0编辑  收藏  举报