对于扫描装配而言使用的注解是**@Component和@ComponentScan**。@Component是标明哪个类被扫描进入IoC容器,而@ComponentScan则是标明采用何种策略去扫描装配Bean
修改user类,加入@Component注解
@Component("user")
public class User {
@Value("1")
private Long id;
@Value("user_name_1")
private String userName;
@Value("note_1")
private String note;
}
@Component标明这个类将被IoC容器扫描装配,其中的"user"是作为Bean的名称,如果不配置的话,IoC容器就会把类名第一个字母小写,其他不变作为Bean名称放入IoC容器中
@Value则是指定具体的值
修改AppConfig,加入@ComponentScan
@Configuration
@ComponentScan
public class AppConfig {
}
加入了@ComponentScan,意味着它会进行自动扫描,但是它只会扫描类AppConfig所在的当前包和其子包,之前把User.java移动到它的当前目录下就是这个原因,这样就可以删除之前使用@Bean标注的创建对象方法了
然而为了使得User类能够被扫描,我们把它迁移导论本部不该放置它的配置包,这样不合理,其实可以自定义扫描的包
可以通过@Component的配置项basePackages定义扫描的包名;还可以通过basePackageClasses定义扫描的类;还有includeFilters和excludeFilters
修改AppConfig中的注解:
@ComponentScan(basePackageClasses = {User.class})
//@ComponentScan(basePackages = {"com.springboot.chapter3.pojo"})
为了使包下的某个容器不被注入
//@ComponentScan(basePackages = "com.springboot.chapter3.*",excludeFilters = {@ComponentScan.Filter(classes = {Service.class})})