使用@Bean注入容器
默认
直接在方法上加@Bean
,Bean名称默认为方法名
指定name
允许使用@Bean("xxx")
指定name,效果同@Bean(name = "xxx")
对应类型重复的bean:
@Bean("user")
public UserDto initUser() {
UserDto userDto = new UserDto();
userDto.setId(1L);
userDto.setUserName("name1");
userDto.setNote("mua");
return userDto;
}
@Bean("user2")
public UserDto initUser2() {
UserDto userDto = new UserDto();
userDto.setId(2L);
userDto.setUserName("name2");
userDto.setNote("mua");
return userDto;
}
根据类型获取bean
两个bean类型相同时,根据类型获取bean会报错:
Exception in thread “main” org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type ‘***’ available: expected single matching bean but found 2: xxx,xxx
两个bean能加入工厂,在获取时,由于不知道取具体那个bean,导致报错。
根据name获取bean
根据name能获取到指定的bean
使用@ComponentScan扫描注入容器
默认
默认只能扫描@ComponentScan
所在包下的bean
不在同一包下会报错:
Exception in thread “main” org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘***’ available
属性
自定义扫描路径
使用basePackages
可以指定扫描哪个路径下的类
过滤器
过滤器分为两种
includeFilters
表示加载指定的类
excludeFilters
表示不加载指定的类
默认按注解过滤
设置依赖延迟注入
在实际ctx.getBean(JobDto.class)
之前,未加载加载。
在执行获取bean语句后,才加载: