JavaBean和类成员变量的区别与联系

1.JavaBean

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。

特点(序列化接口可以根据需要实现):

  • 修饰的类必须是public修饰
  • 所有属性为private
  • 提供默认构造方法
  • 提供getter和setter
  • 实现serializable接口

属性:
概念:setter和getter方法截取之后的产物
如:getUsername—>Username—>username(属性)

成员变量:
概念:在类中定义的变量成为成员变量。

BeanUtils工具类
概念:主要用于封装JavaBean对象的工具类
主要方法:

setProperty()
getProperty()
populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
 

2.Java成员属性

当一个属性被声明成类属性,那么所有的对象,都共享一个值。

对比:当一个属性被static修饰的时候,就叫做类属性,又叫做静态属性

类属性: 又叫做静态属性 
对象属性: 又叫实例属性,非静态属性 

示例代码如下:

public class Hero {
    public String name; //实例属性,对象属性,非静态属性
    protected float hp;
    static String copyright;//类属性,静态属性

......

3.区别

类属性不一定是bean 属性,bean属性需要看暴露的get、set方法,至少有一个即可说明是bean属性(属性要私有化,对外要提供get\set 方法对外暴露)。

bean 属性与类属性没说明必然关系,只要暴露的get、set方法,至少有一个即可说明是bean属性。

4.Spring中的set注入与JavaBean

如下实体类Person

  • age ,name ,nickName都是成员属性
  • age 有暴露的get和set方法是bean属性
  • name 有一个set方法也是bean属性,满足至少有一个get或set方法
  • nickName 没有get和set方法不是bean属性,只是一个成员属性
  • getEmail() 是get方法,满足至少有一个get或set方法,是bean属性
  • setAddr(String addr) 是bean 属性,可以在web.xml中通过set方式注入
package cn.tedu.domains;

public class Person {
    //age ,name ,nickName都是成员属性
    private int age;
    //至少有一个set 或者get 就是bean属性
    private String name;
    //这个不是bean 属性,是类属性
    private String nickName;

    public int getAge() {
        return age;
    }

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

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

    public String getEmail(){
        //这个是bean 属性
        return null;
    }
    //这个是bean 属性,不是类属性//可以在web.xml 中配置,可以通过spring的set方式注入
    public void setAddr(String addr) {
    }
}

 spring通过set方式注入,必须要有暴露的set方法。上面的nickname只是成员属性,不是bean属性,所以无法通过spring的set方法注入

web.xml中的配置

    <bean id="person" class="cn.tedu.domains.Person">
        <property name="name" value="张三"/>
        <property name="age" value="18"/>
        <property name="addr" value="北京"/>
    </bean>

测试验证:

Person类如上代码,当没有提供toString()方法时,获取到对象打印输出的是地址信息 

提供了toString()方法后可以看到能打印出spring set方式注入的值

修改后的Person类代码

package cn.tedu.domains;

public class Person {
    //age ,name ,nickName都是成员属性
    private int age;
    //至少有一个set 或者get 就是bean属性
    private String name;
    //这个不是bean 属性,是类属性
    private String nickName;

    public int getAge() {
        return age;
    }

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

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

    public String getEmail(){
        //这个是bean 属性
        return null;
    }
    //这个是bean 属性,不是类属性//可以在web.xml 中配置,可以通过spring的set方式注入
    public void setAddr(String addr) {
        System.out.println("addr:"+addr);
    }

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", nickName='" + nickName + '\'' +
                '}';
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值