(一)Bean扫描
在使用Spring的时候,我们要做到Bean扫描,一般是两种方式,一种是用标签规定扫描的包路径,一种是利用注解来规定扫描的包路径。
标签:
<context:component-scan base-package="com.hsh"/>
注解:
@ComponentScan(basePackages="com.hsh")
而在SpringBoot中,我们发现没有以上两种方式,那它如何实现Bean扫描呢?
我们可以发现,在SpringBoot的启动类中,有一个SpringBootApplication注解,这个注解是一个组合注解,意思就是它是一组注解的集合,而其中有一个ComponentScan注解就是专门进行包扫描的也就是Bean扫描,只不过它没有规定扫描的范围,因此,它默认会扫描该注解所在的类的包或者子包。(也就是默认扫描启动类所在的包及其子包)
如果将启动类所在的包中的controller拖到外面,则boot工程就不能扫描到controller
在这种情况下,如何让boot工程扫描到controller呢,咱们可以在启动类中手动添加ComponentScan注解:
package com.example.app01;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePackages = "com.example")
@SpringBootApplication
public class App01Application {
public static void main(String[] args) {
SpringApplication.run(App01Application.class, args);
}
}
得到结果如下:
(二)Bean注册
众所周知,SpringBoot可以自动的扫描启动类所在的包及其子包,通过扫描注解将相对应的Bean对象注入到Ioc容器中,早在Spring中就有对Bean注册的解释,常用于Bean对象的注解有以下几种:
注解 说明 位置 @Component 声明bean的基础注解 不属于以下三类时,用此注解 @Controller @Component的衍生注解 标注在控制器类上 @Service @Component的衍生注解 标注在业务类上 @Repository @Component的衍生注解 标注在数据访问类上(由于与mubatis整合,用的少)
有一个问题,目前这些注解都是针对于当前自定义的bean对象,然后通过注解注入到Ioc容器中,
如果出现了第三方的bean对象,那如何将他们注入到Ioc容器中呢?还是否可以使用以上那些注解
将第三方的bean对象注入到Ioc容器中呢?
说明:通过亲手操作一下可以得到,当我们给第三方bean对象添加注解的时候,他们不能修改只是可读的,因此想要通过给这些第三方bean对象添加注解的方式注入显然不可能了,它是无法使用@Component及衍生注解声明bean的。而为了给第三方bean对象提供服务,SpringBoot提供了两个注解:@Bean和@Import 这两个注解,其中不要把@Bean和bean对象搞混了。
为了让大家更好的理解bean注册,黑马程序员的课程中引入了一个jar包来实现bean的注册, 这个就是:链接:https://pan.baidu.com/s/1EzXEvwe_xNrvHBBDAmf-eg?pwd=u3qr
提取码:u3qr
有关bean对象的压缩包我已经放到网盘上了。
它的大致流程就是:
(1)首先将common-pojo-1.0-SNAPSHOT.jar添加到本地maven库中;
(2)然后自己可以创建一个新项目
(3)在pom文件中添加坐标,当然,这个项目中springboot的起步依赖可以不用,