Jdk 动态代理:利用java的反射,允许运行时动态地创建一个代理类,实现一个或多个接口,将方法的调用转发到你所指定的类。
问题场景:
有一个Person类,其中属性字段有:姓名name、性别gender、兴趣interests、评分值hotOrNotRating,要求:get方法所有字段,对于所有该类实例拥有者或者非该类实例拥有者都有效,而该类实例拥有者除了不能给自己评分之外,可以修改所有的其他字段,而非该类实例拥有者只能设置该评分值,而不能修改其他所有的字段。
利用Java动态代理实现代码如下:
PersonBean.java 类如下:
public interface PersonBean {
String getName(); // 取得人的名字
String getGender(); // 性别
String getInterests(); // 兴趣
int getHotOrNotRating(); // HotOrNot评分(1到10)
void setName(String name);
void setGender(String name);
void setInterests(String interests);
void setHotOrNotRating(int rating);
}
PersonBeanImpl.java 类如下:
public class PersonBeanImpl implements PersonBean {
String name;
String gender;
String interests;
int rating; //当前的评价分数
int ratingCount = 0; // 当前的评价数
@Override
public String getName() {
return name;
}
@Override
public String getGender() {
return gender;
}
@Override
public String getInterests() {
return interests;
}
@Overr