下面会分别对Jdk和Cglib两种类型的动态代理的对象进行分析
1.Cglib
1> 直接通过反射创建代理对象
User user=new User("zyz",123);
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(user.getClass());
enhancer.setInterfaces(user.getClass().getInterfaces());
enhancer.setCallback(new NoOp() {
@Override
public int hashCode() {
return super.hashCode();
}
});
User u=(User) enhancer.create();
System.out.println(u);
BeanUtil.setFieldValue(u,"name","mzd");
BeanUtil.setFieldValue(u,"age",456);
System.out.println(u);
u.name="cyq";
System.out.println(u);
// res:
User{name='null', age=0}
User{name='mzd', age=456}
User{name='cyq', age=456}
没有指定代理的对象时,直接修改和通过强制注入都是可以修改代理对象的属性值的
2> 代理某个对象