创建 BookController、BookService、BookDao,并通过 @Autowired 注解将 BookService 注入到 BookController 中,将 BookDao 注入到 BookService 中
BookDao:
package org.example.dao;
import org.springframework.stereotype.Repository;
@Repository
public class BookDao {
}
BookService:
package org.example.service;
import org.example.dao.BookDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookService {
@Autowired
private BookDao bookDao;
@Override
public String toString() {
return "BookService{" +
"bookDao=" + bookDao +
'}';
}
}
BookController:
package org.example.controller;
import org.example.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class BookController {
@Autowired
private BookService bookService;
}
配置类,通过 @ComponentScan 注解将上述三个类扫描到容器中:
package org.example.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@ComponentScan({"org.example.controller","org.example.service","org.example.dao"})
@Configuration
public class MainConfigOfAutowired {
}
测试方法,验证通过自动注入的方式以及直接从容器中获取这两种方式得到的 BookDao 是否是同一个:
@Test
public void testAutowired(){
ApplicationContext ac = new AnnotationConfigApplicationContext(MainConfigOfAutowired.class);
BookService bookService = ac.getBean(BookService.class);
System.out.println(bookService);
BookDao bookDao = ac.getBean(BookDao.class);
System.out.println(bookDao);
}
测试结果:
结果证明,两种获取方式得到的 BookDao 为同一个。
@Autowired默认是根据类型进行注入的,因此如果有多个类型一样的Bean候选者,则需要限定其中一个候选者,否则将抛出异常
二、@Qualifier 注解


