上节课我们学习了使用注解的方式加载bean对象
如上面的代码 创建一个ApplicationContext上下文对象 并且传入配置类 我们在实际开发中配置类会有多个,如果手工去填写配置类,不是很方便 所以我们介绍一下第一种方法扫描包的方式
下面我们来到官方文档https://docs.spring.io/spring/docs/5.0.4.RELEASE/spring-framework-reference/core.html#beans-java-bean-annotation
根据文档我们写下代码
我们假设相关的bean以及自己写的一些业务类库放在com.jtthink.SpringLean下面 我们对这个包进行扫描
在MySpring中
运行结果
可以看见我们没有传入配置类文件,自动对我们包下面的类文件进行了扫描
我们还可以通过xml的方式加载 这里先不演示 官方文档里面有
接下来我们在SpringBean包下面创建一个newsService.java文件
目录如下
里面写入代码
下面我们将NewsService这个service集成到IoC容器中
所以我们创建在SpringBean里面创建一个NewsConfig配置类
目录如下
里面代码如下
接下来在MySpring里面做下调用
运行结果
以上代码即通过IoC容器进行调用
下面我们想一个问题 如果在NewsService里面想调用UserService里面内容怎么办?
我们要用到下面的内容
@AutoWired自动装配注解 可以非常方便的帮我们直接从IoC容器里面把相关的类装配进去
下面看下代码
NewsService里
在UserService里面加入一段测试代码
运行结果
以上就是@AutoWired自动装配的基本功能
接下来我们学习注解另一种写法
在NewsService里面讲自动装配代码去掉
运行结果
报错了 因为UserService类没有被加载进去
上面一张图片 在@AutoWired上面alt+enter会对代码进行优化 将自动装配注解打在了构造函数上
下面我们修改下代码
新增一个abc方法 并打入自动装配注解
运行结果
依然报错 以为注解打在了我们的方法上面
我们加入参数如上面 abc方法被自动执行了
运行结果
下面我们添加几行代码
运行结果
上面是在方法上打入@AutoWired注解产生的效果
上面就是使用注解的两种方式,在学习后面的spring mvc时候,经常会用到自动装配,我们在外部定义好类之后,都要通过上面的方式进行自动装配,而不是通过实例化new的方式到处创建我们无法控制的对象
接下来我们在学习一个知识点
在MyConfig中在写一个UserService方法
运行代码
可以看见报错了
是因为我们写入了@AutoWired 使其找不到到底要加载哪个bean
实际上@AutoWired在装配的时候是按照类型进行装配的
为了解决上面问题 我们学习下面的内容
@Qualifier注解 对我们多个同类型的bean进行区分
下面代码演示下
在MyConfig里面
在NewsService里面
运行结果
还有另外一种办法 如果不打入@Qualifier注解 返回的是一个UserService类型的数组
下面看下代码 首先我们将MyConfig中的@Qualifier注解注释掉
代码如下
修改下NewsService里面代码
运行结果
上面的这种方法官网中也有介绍 我们可以查看