面试题
Spring框架中,如何通过组件扫描来创建类的对象
在某个配置类上添加@ComponentScan
注解,必要的话,配置这个注解的value
/ basePackages
属性,可以指定组件扫描的根包。
将需要被Spring创建对象的类型,声明在这个根包之下,并且,在类上添加组件注解即可。
常用的基本组件注解有:@Component
、@Controller
、@Service
、@Repository
。
使用Spring框架时,如何选取@Bean方法和组件扫描,使得Spring创建对象
自定义的类应该使用组件扫描,其它类(不是自行创建的类型)必须使用@Bean
方法。
请描述@Autowired
的自动装配机制
首先,在Spring容器中查找匹配类型的Spring Bean的数量
- 0个:取决于
@Autowired
注解的required
属性required = true
:加载Spring时出现NoSuchBeanDefinitionException
required = false
:放弃自动装配,则属性值为null
- 1个:直接装配,且成功
- 多个:将尝试根据名称来自动装配,要求被自动装配的属性名与Spring Bean的名称是匹配的,如果存在匹配的,则成功装配,否则,加载Spring时出现
NoUniqueBeanDefinitionException
- 关于名称匹配,可以是属性名改为某个Spring Bean名称,或在属性上添加
@Qualifier
注解来指定某个Spring Bean的名称
- 关于名称匹配,可以是属性名改为某个Spring Bean名称,或在属性上添加