使用@ComponentScan自动扫描组件并指定扫描规则
@Repository、@Service、@Controller、@Component注解的类都会被扫描到,并自动注入到Spring容器中。
此时,我们分别创建BookDao、BookService以及BookController这三个类,并在这三个类中分别添加@Repository、@Service、@Controller注解,如下所示。
BookDao
// 名字默认是类名首字母小写
@Repository public class BookDao { }
Book Service
@Service public class BookService { }
Book Controller
@Controller public class BookController { }
测试:
我们就可以在IOCTest测试类中编写如下一个方法来进行测试了,即看一看IOC容器中现在有哪些bean。
public class IOCTest {
@Test
public void test(){
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
String[] definitionNames = context.getBeanDefinitionNames();
for (String name : definitionNames) {
System.out.println(name);
}
}
}
使用注解配置包扫描
使用@ComponentScan注解来配置包扫描了。使用@ComponentScan注解配置包扫描非常非常easy!只须在我们的MainConfig类上添加@ComponentScan注解,并将扫描的包指定为com.baidu即可,如下所示。
@Configuration //告诉Spring这是一个配置类,相当于Bean.xml
@ComponentScan(value = "com.baidu", excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)}) //就会扫描这个包下的所有注解;
public class MyConfig {
@Bean("person01") //相当于我们的bean
public Person person(){
return new Person("lisi",20);
}
}
查看@ComponentScan 源码分析;
小结:
@Filter(type = FilterType.ANNOTATION,),这是通过注解;
public enum FilterType {
ANNOTATION,
ASSIGNABLE_TYPE,
ASPECTJ,
REGEX,
CUSTOM;
private FilterType() {
}
}
对于Filter的过滤方法,我们有很多的方法去实现;
我们可以使用@ComponentScan注解来指定Spring扫描哪些包,可以使用
excludeFilters()方法来指定扫描时排除哪些组件,也可以使用
includeFilters()方法来指定扫描时只包含哪些组件。
当使用includeFilters()方法指定只包含哪些组件时,需要禁用掉默认的过滤规则。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71825.html