Bean的管理

1.主动获取Bean

spring项目在需要时,会自动从IOC容器中获取需要的Bean

我们也可以自己主动的得到Bean对象

(1)获取bean对象,首先获取SpringIOC对象

private ApplicationContext applicationContext //IOC容器对象

(2 )方法1:根据名称获取bean

创建bean对象,没有指定名称时,默认就是 bean的名称 就是 类名的首字母小写

直接获取得到的是Object对象,需要强转

三次运行都只得到一个Bean,说明Bean对象默认是单例的



2.bean的作用域:(知道这两种就行了)

单例的:容器内只有一个单例的Bean

非单例的:每次使用都创建新的bean

下面三种只在web环境中才有,不重要

可以通过@Lazy来延迟加载bean,只有第一次使用时,才会初始化这个bean。(使用不多)



3.第三方bean的配置

我们声明自己的bean对象是用这几个注解,自己的bean对象就是自己写的类,将自己的bean对象交给IOC容器管理,加上这几个注解及其衍生注解

场景:

dem4j是用来解析xml文件的,

我们想要用的话,第一步,先在pom中加入这个dom4j这个依赖

第二步,可以在类中new一个SAXReader对象,然后调用方法就可以使用了

但是我们都是用Spring框架了,这样使用太麻烦了,我们可以把SAXReader交给IOC容器去管理,每次用的时候,直接注入就好了。但是发现SAXReader类并没有加上@component注解生成bean对象,且是只读文件,我们也加不了

所以,我们使用第三方的bean对象,就不能像之前的做法,直接在类上加@component注解生成bean对象了

解决方法:使用第三方的bean

在启动类上加上一个方法(方法名就是第三方类交给IOC管理的bean对象的bean的默认名称),方法返回值(这个类的对象)交给IOC容器管理,成为bean对象。

这个方法必须加上@Bean注解

这样,在其他地方使用这个对象,使用@Autowired注入进来就可以了

和main方法是平行的

但是呢?如果都加到启动类中,启动类就变复杂了,要保证启动类的纯洁,不建议加在启动类中写多余的代码

我们建议在配置类(@Configration)中声明这样一个类,集中管理第三方的bean注入。

在配置类上加上一个方法(方法名是随意的),方法返回值(这个类的对象)交给IOC容器管理,成为bean对象。如果有多个第三方的bean,再定义一个方法,重复这个过程,就可以了

验证:方法名就是 IOC容器中bean的名称

测试:通过主动获取bean对象方法,通过bean的名称获取bean对象,看看能不能获取到?

获取到了,说明 方法名就是 IOC容器中bean的名称



注入第三方bean的时候,如何解决依赖注入的问题?写到形参里就可以了

场景:如果我们在注入第三方bean(SAXReader)的时候,SAXReader还依赖DeptService的bean,怎么办?

只需要把DeptService放到形参的位置,spring就会自动注入DeptService的bean以帮助我们注入第三方bean(SAXReader)

不需要@Autowired手动装配

总结:

(1)如果是自己定义的类,想交给IOC容器管理,就是用@Component注解及其衍生注解

(2)如果是引入第三方的类,想交给IOC容器管理,,并且源码中没有加@Component注解,源码文件又只读不可写,我们也加不了,就要使用@Bean注解,放到配置类中,交给IOC容器管理

相关推荐
cooldream200911 分钟前
SpringMVC 执行流程详解
java·spring·springmvc
redemption_213 分钟前
SpringMVC-01-回顾MVC
java
GISer_Jing14 分钟前
前端测试工具(Jest与Mock)
前端·测试工具
redemption_217 分钟前
Spring-02-springmvc
java
GGBondlctrl19 分钟前
【Spring MVC】初步了解Spring MVC的基本概念与如何与浏览器建立连接
java·spring boot·spring mvc·requestmapping·restcontroller
ModelBulider23 分钟前
SpringMVC应用专栏介绍
java·开发语言·后端·spring·springmvc
licy__25 分钟前
HTML 元素类型介绍
前端·css·html
努力的Java程序员26 分钟前
后端接受大写参数(亲测能用)
java·开发语言
一雨方知深秋31 分钟前
WEB APIS(DOM对象,操作元素内容,属性,表单属性,自定义属性,定时器)
开发语言·前端·javascript
皓木.39 分钟前
SQL-多表操作
数据库·sql