Spring-IoC-DI-基于注解方式的依赖注入-(案例七:泛型依赖注入)

时间:2020-10-22 09:38:38   收藏:0   阅读:26

案例八:泛型依赖注入

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

 技术分享图片

 

 

 

原文:https://www.cnblogs.com/orzjiangxiaoyu/p/13855646.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!