接口:public interface IUserService { public abstract void save(); public abstract void delete(); public abstract boolean isFlag();}
类:public class UserService implements IUserService {
private boolean flag;
public boolean isFlag() {
return this.flag;
} public UserService() {
}
public UserService(boolean flag){
this.flag = flag;
}
public void save(){
System.out.println("这是save()方法");
}
public void delete(){
System.out.println("这是delete()方法");
}
}
代理类:public class DynamicProxy { private Object target; public Object getObject(Object obj){
this.target = obj;
return Proxy.newProxyInstance(this.getClass().getClassLoader(),
this.target.getClass().getInterfaces(), new InvocationHandler(){
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
IUserService service = (IUserService) DynamicProxy.this.target;
if(service.isFlag()){
return method.invoke(target, args);
}
return null;
}
});
}
}
测试类:
public class AopJunit { @BeforeClass
public static void setUpBeforeClass() throws Exception {
} @Test
public void aop(){
DynamicProxy proxy = new DynamicProxy();
IUserService service1 = (IUserService) proxy.getObject(new UserService(false));
System.out.println(service1.isFlag()); //此处会报空指什,为什么???③
IUserService service2 = (IUserService) proxy.getObject(new UserService(true));
System.out.println(service2.isFlag());
service1.save(); //①
service2.save(); //②
}
}
问题:
1.③处为何报空指针异常?
2.①处同样执行了save方法,这是为什么?
经过测试发现:无论我new了多少个实例,实际存在的就只有一个实例,是否动态代理类只生成一个实例?
类:public class UserService implements IUserService {
private boolean flag;
public boolean isFlag() {
return this.flag;
} public UserService() {
}
public UserService(boolean flag){
this.flag = flag;
}
public void save(){
System.out.println("这是save()方法");
}
public void delete(){
System.out.println("这是delete()方法");
}
}
代理类:public class DynamicProxy { private Object target; public Object getObject(Object obj){
this.target = obj;
return Proxy.newProxyInstance(this.getClass().getClassLoader(),
this.target.getClass().getInterfaces(), new InvocationHandler(){
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
IUserService service = (IUserService) DynamicProxy.this.target;
if(service.isFlag()){
return method.invoke(target, args);
}
return null;
}
});
}
}
测试类:
public class AopJunit { @BeforeClass
public static void setUpBeforeClass() throws Exception {
} @Test
public void aop(){
DynamicProxy proxy = new DynamicProxy();
IUserService service1 = (IUserService) proxy.getObject(new UserService(false));
System.out.println(service1.isFlag()); //此处会报空指什,为什么???③
IUserService service2 = (IUserService) proxy.getObject(new UserService(true));
System.out.println(service2.isFlag());
service1.save(); //①
service2.save(); //②
}
}
问题:
1.③处为何报空指针异常?
2.①处同样执行了save方法,这是为什么?
经过测试发现:无论我new了多少个实例,实际存在的就只有一个实例,是否动态代理类只生成一个实例?
解决方案 »
- 将for循环转换为while错误
- java 如何 将byte[] 转换为 二进制代码?
- String Method ????
- 字符串和字符数组转换问题!!!
- 界面显示不了
- ★jTable的CELL长度如何设置?
- 关于Graphics类与Graphics2D类的用法,一点小问题
- 请教关于System.out.println("HelloWorld");的问题??谢谢
- ------ 求助DOM中文解决 ------
- Visual Age for Java如何可以连接到Domino数据库中,从数据库的某一篇文档中读出一此信息处理后再写入文档,采用DIIOP,远程连接方式
- 关于Class.forName、Class.class(属性)、getClass()的问题
- 请问如何通过socket向C++的程序传送一个结构体
1.当service.isFlag() = false时,返回对象为null,所以会报NullPointException.
2.因为Proxy.newInstance()为static方法,所以能够让代理类初始化成功的只有最后一次初始化.总结:应加强分析,简单问题发贴是浪费资源!!!
学习了 看来要细心哦