Java Bean是什么?简而言之,是一种定义java class的规范,这个class中的field是private,任何读写都是通过 set和get实现,且set get必然是public。
如果java bean 这么定义,那么我们可以想象Java bean的用途应该更多的作为一种数据结构,本身不应该具备什么业务功能,那么如果要发挥作用,必然只能借助于其他类,所以java bean 本身的作用更多的应该是提供数据结构,而不是提供业务计算。
从另一个角度讲,java本身有一个内省库,其中有一个类叫做Introspector,该类提供一个方法getBeanInfo,可以获取java bean的信息,返回值为BeanInfo,而BeanInfo又可以通过方法getPropertyDescriptors获取java bean所有属性(成员变量)的描述信息。PropertyDescriptor有两个代表方法:getReadMethod和getWriteMethod,从此可以反向看出java bean的定义是合理的。
那么如果我们定义了一个java class 部分属性符合规范,部分不符合规范,那么还可以叫做java bean吗?
举个例子,如下图代码:
执行结果如下图:
那么可以据此得到结论,虽然BeanTest不是一个规范的java bean,但是实际执行的时候是没有任何影响的,只不过我们根据java bean的规范,只能访问到规范的属性,不规范的属性则无法访问。因此如果java class不是规范的java bean,那么我们在使用针对java bean的一些机制时,就要留心。
Spring Bean是什么?这个比较好定义,任何可以被spring 容器创建实例的java class都可以叫做spring bean。
熟悉spring的都知道spring容器是一种托管机制,也就是说java class的生命周期只要可以被spring容器托管就认为是spring bean。显然spring bean是spring框架机制的一部分,和java bean的通用规范是不同的。