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

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

感谢你的观看,谢谢你。spring

在spring核心配置文件中,有一个bean标签,咱们之前建立一个对象都是直接new。微信

而在spring中能够将对象交给spring管理,再经过spring工厂直接获取。maven

因此咱们也称之为spring容器。编辑器

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

  • Bean的做用域:单例与多例说明。
  • Bean属性依赖注入的两种方式,以及p名称空间、seEL表达式的引入。
  • 补充说明一个IDEA插件。

1、bean的做用域

做用域也就是指:由spring建立的bean对象在什么状况下有效?主要有单例和多例两种。工具

在spring核心配置文件中能够配置对象是单例仍是多例,经过scope属性设定:学习

  • 值为singleton即为单例,默认值,可省略。
  • 值为prototype即为多例。

1单例测试开发工具

屡次获取单例对象,并打印输出。测试

咱们会发现:若是是单例的话,构造方法只运行一次,屡次获取的是同一个对象。

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

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

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

2多例测试

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

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

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

2、bean属性的依赖注入

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

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

1构造器参数注入 constructor-arg

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

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

②spring配置构造器参数

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

因此必需要有有参构造方法,否则会报错。

  • index:根据索引定位属性,0表示首位。
  • name:根据属性参数名称定位属性。
  • type:根据属性数据类型定位属性。
  • value:简单的值,字符串。
  • ref:复杂的值,就是经过该属性能够引用由spring容器建立的其它bean对象。

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

配置完成,作一个测试

根据运行结果咱们能发现,经过spring的配置,能够给对象初始化赋值。

也就至关于new Car(1,"长安",20000)。

经过spring就不须要咱们本身new了。

2setXXX方法属性注入

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

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

①建立Person类,定义setXXX方法

使用Lombok插件能够快速建立一个Javabean,这个插件文章最后有说明。

②spring配置setXXX方法参数

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

  • name:setXXX方法的属性名字,例如setXXX()那么name的属性值为XXX。

  • value:简单的值。

  • ref:复杂的值,引用由spring容器建立的其它bean对象的名字。

配置完成,作一个测试

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

该方法也就至关于经过对象调用方法setId(1),setName(“刘小爱”)…

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

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

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

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

能够将property标签直接做为属性使用。

  • 若是是引用简单对象,直接用属性名说明便可,好比p:id,p:name。
  • 若是是引用复杂对象,须要用ref来补充说明,好比p:car-ref。

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

2spEL表达式

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

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

spEL表达式的使用功能比较多,Bean操做相关的一般有:

  • #{bean的Id} 引用Bean,好比#{car}。

  • #{bean的Id.属性} 引用Bean的属性,好比#{person1.name}。

  • #{bean的Id.方法(参数)} 调用Bean的方法

附:补充一个Lombok插件

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

若是之前没使用过该插件,右侧下载便可。

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

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

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

它有什么用呢?

咱们之前建立一个标准的JavaBean,有构造方法,有getset方法,有toString方法,一会儿要写不少方法。

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

最后

谢谢你的观看。

若是能够的话,麻烦帮忙点个赞,谢谢你。

本文分享自微信公众号 - 刘小爱(liuxiaoai946)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索