在SpringBoot中采用@SpringBootApplication,等价于定义@SpringBootConfiguration+@ComponentScan+@EnableAutoConfiguration。
1.@SpringBootConfiguration**
@SpringBootConfiguration或@Configuration(Bean定义)等价于之前XML配置中的< bean id="" class="">
在启动类前追加@SpringBootConfiguration或@Configuration
@SpringBootConfiguration//bean定义
public class RunBoot {
}
在类中定义方法,追加@Bean标记
@Bean(name="deptdao")//将返回的对象添加到spring容器中,id名默认为方法名
public DeptDao deptDao2() {
return new DeptDao();
}
如果有多个相同类型对象,可以使用@Primary指定默认
//<bean id="deptDao1" class="cn.xdl.dao.DeptDao">
@Bean//将返回的对象添加到spring容器中,id名默认为方法名
@Primary//类型注入发生冲突,默认注入
public DeptDao deptDao1() {
return new DeptDao();
}
如果有多个配置类,可以使用@Import注解合并成一个
@SpringBootConfiguration//bean定义
@Import(BeanConfiguration.class)//加载BeanConfiguration配置类
public class RunBoot {
}
2.@ComponentScan(Bean扫描)
等价于之前XML配置中的<context:component-scan base-pakcage="">
@ComponentScan,在启动类前使用,可以指定扫描包路径,也可以按默认路径规则加载。在包中的组件前面,需要使用@Controller、@Service、@Repository、@Component等扫描标记。
//@ComponentScan(basePackages = {"cn.ysf.service","cn.ysf.dao"})定义扫描的包,也可以cn.ysf
//这里basePackages也可以写成value
@ComponentScan//默认扫描当前包以及子包
//@ComponentScan(basePackageClasses = {RunBoot.class})将RunBoot的包路径,指定为扫描的包起点
public class RunBoot {
public static void main(String[] args) {
ApplicationContext app = SpringApplication.run(RunBoot.class, args);
DeptService service = app.getBean(DeptService.class);
System.out.println(service);
DeptDao dao = app.getBean(DeptDao.class);
System.out.println(dao);
service.add();
}
}
扫描还可以指定类类型,以及自定义标记,当指定类类型时,不用再类上追加标记,也能扫描进来
这是类类型扫描
@ComponentScan(includeFilters = {
@Filter(type=FilterType.ASSIGNABLE_TYPE,classes = {
DeptService.class})
})
public class RunBoot {
public static void main(String[] args) {
自定义标记扫描
@ComponentScan(includeFilters = {
@Filter(type=FilterType.ANNOTATION,classes = {
MyComponent.class})
})
3.@EnableAutoConfiguration (自动配置)
SpringBoot特有功能,省略大量的XML配置定义