【框架】121:spring框架之IOC容器

2020-08-26  本文已影响0人  刘小爱

​今天是刘小爱自学Java的第121天。

感谢你的观看,谢谢你。

image

在spring核心配置文件中,有一个bean标签,我们以前创建一个对象都是直接new。

而在spring中可以将对象交给spring管理,再通过spring工厂直接获取。

所以我们也称之为spring容器。

今天的学习内容就是关于bean标签:

一、bean的作用域

作用域也就是指:由spring创建的bean对象在什么情况下有效?主要有单例和多例两种。

image

在spring核心配置文件中可以配置对象是单例还是多例,通过scope属性设定:

1单例测试

image

多次获取单例对象,并打印输出。

我们会发现:如果是单例的话,构造方法只运行一次,多次获取的是同一个对象。

在spring IOC容器中仅存在一个bean实例,bean以单例方式存在。

注意:这边我大致提下,昨天忘记说明了,通过spring工厂获取对象时,参数可以是id,也可以是bean的类型,也就是对应接口/类的Class对象。

使用id获取最稳妥,如果根据类型获取,配置了多个类型的话,会抛出异常。

2多例测试

image

多次获取多例对象,并打印输出。

我们会发现:多例构造方法会运行多次,多次获取的都是不同的对象。

每次从容器中调用bean时,都会返回一个新的实例,即每次调用getBean()的时候,相当于new了一次bean对象。

二、bean属性的依赖注入

什么是Bean属性的依赖注入?

就可以理解成对一个对象的属性赋值,这个我们昨天就接触过,其有两种注入方式:

1构造器参数注入 constructor-arg

image

①创建Car类,定义构造方法

既然是通过构造器参数注入,那肯定需要有参构造方法,其中为了方便测试时观看,还在该类中重写一个toString方法。

②spring配置构造器参数

constructor-arg:该标签相当于在告诉spring容器,要调用有参构造方法了,不再调用默认的构造方法了。

所以必须要有有参构造方法,不然会报错。

一般都是使用name属性赋值,这样最合理,也一目了然,name和type这两种都不靠谱。

配置完成,做一个测试

image

根据运行结果我们能发现,通过spring的配置,可以给对象初始化赋值。

也就相当于new Car(1,"长安",20000)。

通过spring就不需要我们自己new了。

2setXXX方法属性注入

和上述构造器参数注入的效果是差不多的,只不过setXXX方法更具有选择性。

构造器参数注入有几个参数都得设置,少一个都不行,而该方法想设置哪个就设置哪个。

image

①创建Person类,定义setXXX方法

使用Lombok插件可以快速创建一个Javabean,这个插件文章最后有说明。

②spring配置setXXX方法参数

property标签:spring中专门进行setXXX属性注入的标签 。

配置完成,做一个测试

image

根据运行结果我们能发现,通过spring的setXXX方法属性注入,也可以给对象赋值。

该方法也就相当于通过对象调用方法setId(1),setName(“刘小爱”)…

三、p名称空间和spEL表达式

为简化XML文件的配置,Spring2.5版本开始引入了一个新的p名称空间。

准确地说,它的作用是为了简化setXXX方法属性依赖注入配置的,使用方式如下图:

image

在配置文件表头,引入p名称空间。

可以将property标签直接作为属性使用。

通过上图,我们能发现p名称空间能进一步地简化了代码的编写。

2spEL表达式

spEL全称Spring Expression Language,一种表达式语言,和前面学的EL表达式很像。

image

语法:#{…} ,通过该表达式可以引用属性、另一个Bean、甚至运算,方法都可以。

spEL表达式的使用功能比较多,Bean操作相关的通常有:

附:补充一个Lombok插件

image

在idea开发工具中,选择File-settings,找到Plugins,在搜索框中搜索lombok。

如果以前没使用过该插件,右侧下载即可。

插件下载好后,还需要导入依赖才能使用。

image

在maven网站中找到lombok,随便选择一个版本,将依赖复制到我们项目对应的pom文件中即可。

依赖导入完毕,就可以使用该插件了。

它有什么用呢?

image

我们以前创建一个标准的JavaBean,有构造方法,有getset方法,有toString方法,一下子要写很多方法。

但是现在有了lombok插件后,只需要在类上加一个注释@Data,这些方法就都不用写了。

最后

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

上一篇下一篇

猜你喜欢

热点阅读