Bean的概念
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。
Bean的本质就是java当中的一个类,而Spring的bean其实就是对实体类的一个引用。在Bean配置文件当中使用< bean> 和 < /bean>标记定义每一个bean
Bean的配置
Spring容器支持俩种文件进行配置,分别是xml
和properties
Bean定义包括容器必须知道的关于bean的基本信息,如:创建bean的过程,bean的生命周期的详细信息,以及该bean的各种依赖。
Bean标签标记的属性:
- id:唯一标识符
- name:用于指定bean的别名
- class:用于指定bean类的全限定名称(包名和类名)
- scope:用于定义已被定义的bean的作用域,对于不同取值有不同效果。默认值是
singleton
单例,表示不管怎么获取Bean对象,这一些Bean对象都是同一个,
在配置文件当中对bean进行配置:id为唯一标识 自定义,class指向一个类
<bean id="Person" class="com.lzq.spring.model.Person">
<property name="name" value="月月鸟"></property>
<property name="age" value="18"></property>
</bean>
Bean属性id的name的详解:
- 当Bean标签没有id和name属性的时候,则类名表示该bean的名字
- 当出现只有id或者name的时候,当name属性的值用分隔符分开,第一个字符串表示该bean的名字,当name的属性只有一个的时候,与id作用相同。
当一个name属性有很多值的时候,我们可以使用实例化的ApplicationContext
的对象调用getAliases
方法,该方法传入一个name的值,再使用一个数组接收,使用for循环输出。使用该方法的输出的结果表示所有id name对应的值(传入的值不包括)。如下代码所示:
String [] a=ac.getAliases("a") ;
//这个地方的ac就是一个ApplicationContext对象
System.out.println("获取别名:");
for(String b:a) {
System.out.println(b);
}
Bean的实例化
在面向对象当中,如果要使用莫一个对象,必须要先对其进行实例化,同意,在Spring当中要想使用也需要进行实例化,实例化Bean有三种方式。
- 构造器实例化
在上述代码使用的就是构造器实例化,也是最常用的方法 - 静态工厂方式实例化
顾名思义,是对一个静态对象进行实例化,Static
修饰的方法在其他类当中不需要实例化类,可以直接使用类名.方法名调用。 - 实例工厂方式实例化
在使用实例化工厂实例化的时候相比于静态工厂多了一句,如下图:
Bean的作用域
Spring4.3提供了7种作用域。如下图所示:
在这7种作用域中,singleton和prototype是最常用的两种作用域
首先是对于singleton作用域:实例化的对象并对其直接输出,可以看到是相同的参数。
再看一下prototype作用域,与singleton异曲同工,可以看到输出的结果是不同的参数: