解决方案 »
- C转java,面向对象和面向过程能否共存?
- 字符串替换问题?
- javascript中window.onload和body onload冲突的解决方法
- java留言板
- swing 能给一次给多个组件添加同一侦听吗
- JAVA 中JFrame 中怎样点击一个按钮就在JFrame中画出一个指定的图形?
- 想深入一点学习Java,我该再学些什么?
- 日期转换的问题给我看下:
- 不好意思,我是菜青虫!#¥%¥%……—*()
- 关于java数组越界异常错误的捕获
- jfree chart生成的图片没问题。但是转换成i m a g e~~~~~生成以后就黑图了。有源码可以直接运行!
- Eclipse如何安装SVN插件啊?
protected 只允许同一个包中的和不同包中的子类访问
default 只允许同一个包中的类访问
private 只允许自己访问
但是你的范围,又不是protected限制描述的范围,
所以我觉得,很难至少缺少一个通用的简洁办法。
因为人家想访问它,Biz又是public的,那么只要继承一下,就访问到了。
那么可能要求你加个final限制可以吗?然后在你允许访问的Package里面,加上这个类的访问Proxy类
.getPropertyType(); Package pkg = propertyType.getPackage();获取来访问的包名,截取字符串,调用前截取字符串调对比
可以啊。
我提供一个纯java做法:
代码如下(已测试成功)package com.abc.b.c;public class Biz { //该方法只能让com.abc包及其下级包、cn.abc包及其下级包才可以使用此方法
public void fun1(Object[] params)
{
//首先获取该方法的调用者的类的完整名称
StackTraceElement stack[] = (new Throwable()).getStackTrace();
String callerPathName=stack[1].getClassName();//这是调用者的类名
//判是否是允许的指定包:com.abc包及其下级包、cn.abc包及其下级包
if(callerPathName.startsWith("com.abc")||callerPathName.startsWith("cn.abc"))
{
System.out.println("允许使用");
}
else
{
System.out.println("不允许使用");
}
}
}
以上仅供楼主参考
输出
0:java.lang.Thread.getStackTrace(Thread.java:1426)
1:com.abc.b.c.B.whocall(B.java:7)
2:cn.abc.test.pack1.A.<init>(A.java:8)
3:cn.abc.test.Test.main(Test.java:7)
使用Spring 是可以控制的
使用代理就可以获得访问的方法签名
{//提供一个外部能访问的方法
public void isUseFun1(Object obj)
{
Class class = obj.getClass();
if(class.getClassName().startsWith("com.abc")||class.getClassName().startsWith("cn.abc"))
{
fun1(Object[] params);
}
else
{
return;
}}//设为私有的
private void fun1(Object[] params)
{
}}
public void isUseFun1(Object obj) ==----------==
这样不行啊,别人不会老老实实传入this的,别人只要这样一传就绕过去了:isUseFun1(new com.abc.b.c.Biz())//随便传入一个能使你正确判别的对象就行了。
VALUE为需要访问方法或者类的信息以后要调用该方法,就通过枚举的东西在MAP里找找到了,反射该方法
那如何控制:哪些人允许实现该接口(如:com.abc包),哪些人不允许实现该接口(如:com.xyz包)呢?