在某个配置类上添加@ComponentScan注解,必要的话,配置这个注解的value / basePackages属性,可以指定组件扫描的根包。
将需要被Spring创建对象的类型,声明在这个根包之下,并且,在类上添加组件注解即可。
常用的基本组件注解有:@Component、@Controller、@Service、@Repository。
自定义的类应该使用组件扫描,其它类(不是自行创建的类型)必须使用@Bean方法。
@Autowired的自动装配机制首先,在Spring容器中查找匹配类型的Spring Bean的数量
@Autowired注解的required属性
required = true:加载Spring时出现NoSuchBeanDefinitionExceptionrequired = false:放弃自动装配,则属性值为nullNoUniqueBeanDefinitionException
@Qualifier注解来指定某个Spring Bean的名称@Autowired与@Resource的装配机制的区别【先回答以上@Autowired的装配机制】
@Resource的装配机制是:先尝试根据名称查找匹配的Spring Bean,且类型也匹配,则自动装配,如果没有匹配名称的Spring Bean,将尝试按照类型来装配,简单来说,是先根据名称,再根据类型的装配机制。
@Autowired与@Resource的区别【先回答以上题目的答案】
@Resource是javax.annotation包中的注解,而@Autowired是Spring框架定义的注解。
@Resource注解可以添加在类上、属性上、方法上,但是,只有添加在属性上,才被解释为自动装配。
@Autowired注解可以添加在属性上、Setter方法上、构造方法上,所以,当尝试自动装配时,可以:
- public class BrandController {
- @Autowired
- private IBrandService brandService;
- }
- // 本示例代码的效果,使用@Resource无法实现
- public class BrandController {
-
- private IBrandService brandService;
-
- @Autowired
- public void setBrandService(IBrandService brandService) {
- this.brandService = brandService;
- }
- }
- // 本示例代码的效果,使用@Resource无法实现
- public class BrandController {
-
- private IBrandService brandService;
-
- @Autowired
- public BrandController(IBrandService brandService) {
- this.brandService = brandService;
- }
- }
其实,关于Spring框架自动调用构造方法:
@Autowired注解)@Autowired注解)@Autowired注解)@Autowired的那1个由于@Autowired可以添加在方法上,如果方法的参数需要被自动装配,但名称不匹配,还可以在方法的参数前添加@Qualifier来指定Spring Bean的名称。
IoC:Inversion Of Control,控制反转,表示将对象的控制权(创建、管理)交给框架
DI:Dependency Injection,依赖注入,表现为给对象的依赖属性赋值
Spring框架通过DI实现了(完善了)IoC。
Spring MVC的核心组件:
DispathcerServlet:用于统一接收请求,并分发HandlerMapping:记录了请求路径与处理请求的控制器组件的对应关系Controller:实际请求的组件ModelAndView:封装了数据与视图名称的结果ViewResolver:根据视图名称确定实际应用的视图组件

在配置节点时,必须配置resultType或resultMap,其中,resultType是直接指定返回值的类型,此属性的取值为返回值类型的全限定名,而resultMap的取值为自行配置的节点的id属性的值,而自定义的是用于指导Mybatis如何封装查询结果的。
当抽象方法的返回值类型是基本数据类型(例如统计查询)或其它基本值类型(通常包括String)时,只能使用resultType。
当抽象方法的返回值类型是封装的类型时,强烈推荐使用resultMap,因为可能具有一定的复用性,并且,复杂的关联查询只能使用的配置。