@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()方法指定只包含哪些组件时,需要禁用掉默认的过滤规则。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)