一、@ComponentScan 自动扫描组件
1、首先创建 BookController、BookService 以及 BookDao
package org.example.controller;
import org.springframework.stereotype.Controller;
@Controller
public class BookController {
}
package org.example.service;
import org.springframework.stereotype.Service;
@Service
public class BookService {
}
package org.example.dao;
import org.springframework.stereotype.Repository;
@Repository
public class BookDao {
}
2、在配置类上添加 @ComponentScan 注解,并指明需要扫描的包
package org.example.config;
import org.example.pojo.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("org.example")
public class MainConfig {
@Bean
public Person person(){
return new Person("lis", "25");
}
}
3.测试方法
@Test
public void testComponentScan(){
ApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig.class);
String[] names = ac.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
4、测试结果
总结
- @ComponentScan 注解用于类或接口上,主要指定扫描路径,Spring会把指定路径下带有指定注解的类自动装配到bean容器里。会被自动装配的注解包括@Controller、@Service、@Component、@Repository等等。
- @ComponentScan 注解需要与 @Configuration 注解搭配使用。其作用等同于 xml 配置文件中的
<context:component-scan base-package="com.maple.learn" />
配置。 - @ComponentScan 如果未指定扫描的路径,则默认的扫描路径为该注解类所在的包