Try Everything Different In My Life.

「📝总结」Bean的概念

2018.08.08

学习Spring的时候,Bean是我们最常看到的名词,但是对于他的理解不够深入,所以花时间来系统的学习一下到底什么是Bean

Java Bean

之前对Java Bean不是很理解,就肤浅的理解成为Java对象,随着学习的深入发现理解是不对的,所以系统的查了一下。

JavaBeans – 维基百科定义了Java Bean是什么

JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。

总结一下,就是以下几点

  • 可以序列化
  • 类是一个公共类(Public修饰)
  • 不能有公共的实例变量,变量都应该是private的
  • 提供无参构造器
  • 提供setter和getter方法

Java Bean 简介及其应用这篇文章中对于Java Bean的结构进行了说明,包括以下三个部分

  • 属性:即Java Bean类的成员变量,用于描述JavaBean对象的状态,对象属性值的改变触发事件,属性本身就是事件源。
  • 方法:在Java Bean中,函数和过程统称为方法,通过方法来改变和获取属性的值。方法可以分为构造方法、访问方法和普通方法等。
  • 事件:事件实际上是一种特殊的Java Bean,属性值的改变触发事件,事件激发相关对象作出反应,通过Java Bean注册对象事件监听者机制来接收、处理事件,它实现了Java Bean之间的通信。

Java bean 是个什么概念 – 知乎这个问题中的第一个回答说明了为什么使用这种规范,看完这篇文章我已经明白Sun公司开始他的套路——定义规范,让程序员或者厂商自己去实现。就好像JDBC一样。下面写一下代码说明一下我的理解吧

public class Person {
	public String name;
	public int age;
}

如上面的代码所示,我声明了一个类Person,他有两个成员变量,我们获取成员变量的值方法就是

String name = new Person().name

这个name我是怎么赋值的,我不知道。我现在修改一下Person类,改成如下:

public class Person {
	
    public int age;

    public String getName(){
        String name = "";
        name = Math.random().toString;
        return name;
    }
}

现在name这个成员变量都没有了,那以前那个程序肯定会报错啊,现在得到name是

String name = new Person().getName();

只是这边名字是通过随机生成的逻辑,我们也可以用别的逻辑来写。这样有好处啊,我反正会最后给你一个String的name,但是我怎么得到的你不知道,听着就越来越像接口的定义,接口就是规范啊,所以自然而然的形成如下的规范。

public class Person {

	public String name;
	public int age ;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

类成员变量的赋值和取值都通过两个方法来实现,那其中到底怎么实现你可以去写。

ps:这里我觉得我的理解不是很好

Java 帝国之Java bean (上)Java 帝国之Java bean(下)这两篇文章用非常通俗的话讲Java Bean说明白了,说明白了他为什么会产生说了他的变迁历史,因为我没有使用过EJB开发过项目,等我从事Java开发的时候已经是Spring的天下,所以EJB为什么差我不知道,不过大家都说差那肯定就是差了啊。

Spring Bean

Difference between JavaBean and Spring bean – Stack Overflow这个投票最高的回答中是这么说的

Java Bean 有如下三个特征
 - 有public修饰的空参构造器
 - 通过setter和getter方法来修改和获得成员变量
 - 实现序列化接口
  
Spring Bean是一个被Spring管理的简单对象。这个对象特别之处就是他是被spring容器实例化,配置和管理的。spring bean在spring的配置文件中被定义(一般是注解的方式),被spring容器实例化然后被依赖注入到应用中。

注意了啊,spring bean不一定是java bean, spring bean可以不实现序列化的接口,也可以有有参数的构造器等等等。。。(PS:这不就是java类吗,,,)
下面是一个文章链接

JavaBean

JavaBeans vs Spring beans vs POJOs, JavaBeans vs Spring beans vs POJOs – 中文这连个是一个文章,中英文版本。习惯了阅读英文是一件非常有意思的事情哈,上面的回答就是拷贝这个文章中的,可以去详细看一下原文是怎么写的。 PS:这个文章提到一个人叫Martin Fowler,你以后会经常看到他,微服务就是他提出的,相关的文章可以在他的网站看到,理所当然是英文的。。Martin Fowler网站

上面的还有几个链接文章基本上讲的是一个内容,可以看一看。

参考