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 + '\'' +
'}';
}
}