Java 如何在代码中的任何位置使用变量?
在JavaEE中,如何在代码中的任意位置使用变量而不将其作为参数传递 类似于公共静态变量的东西。。。但是对于所有请求,静态变量总是相同的。。。除了单个请求外,“静态”变量怎么样 可能吗 下面是一个小例子: 我有:Java 如何在代码中的任何位置使用变量?,java,jakarta-ee,Java,Jakarta Ee,在JavaEE中,如何在代码中的任意位置使用变量而不将其作为参数传递 类似于公共静态变量的东西。。。但是对于所有请求,静态变量总是相同的。。。除了单个请求外,“静态”变量怎么样 可能吗 下面是一个小例子: 我有: protected void doGet (...) { Model m = Model.GetById (...); } public class Model { private String descrition; private Market marke
protected void doGet (...)
{
Model m = Model.GetById (...);
}
public class Model
{
private String descrition;
private Market market;
private List<SparePart> spareParts;
public Model GetById ()
{
Model m = new Model ();
// get info from db using the language
this.market = Market.GetById (...);
this.spareParts = SparePart.GetByModel (m);
}
}
public class SparePart
{
private String description;
public List<SparePart> GetByModel (Model mo)
{
// get info from db using the language
}
}
public class Market
{
private String descrition;
public Market GetById (...)
{
// get info from db using the language
}
}
protectedvoiddoget(…)
{
Model m=Model.GetById(…);
}
公共类模型
{
私有字符串描述;
私人市场;
私有列表备用部件;
公共模型GetById()
{
模型m=新模型();
//使用该语言从数据库获取信息
this.market=market.GetById(…);
this.SparePart=SparePart.GetByModel(m);
}
}
公共类备用零件
{
私有字符串描述;
公共列表GetByModel(型号mo)
{
//使用该语言从数据库获取信息
}
}
公务舱市场
{
私有字符串描述;
公开市场GetById(…)
{
//使用该语言从数据库获取信息
}
}
两者都使用客户端语言对数据库进行查询和检索信息。。。如何设置语言变量,使其不必传递给使用它的方法
Language变量只是一个示例,它可能与其他变量一起出现您可以设置并获取
ServletRequest
对象的属性
request.setAttribute("someName", someObject);
Object someObject = request.getAttribute("someName");
请参阅javadoc
或者,您可以使用(或另一个DI框架)定义一个或多个
@RequestScoped
对象,然后将它们@注入到所需的位置。在JaveEE应用程序中,有十几种方法可以通过执行流传递数据。假设您需要在一个应用程序边界内传递数据
- 当然,您可以使用公共静态最终常量
- 您可以使用公共静态变量,但要考虑到这一点
环境是非常多线程的。所以使用原子包装器
(原子整数等)
- 你可以用
- 而单请求范围(http(rest)->中间接受器)->bean
->响应)您可以使用ThreadLocal
- 当然,您可以使用有状态或单例bean,也可以使用CDI
事件
- 如果您使用的是Payara服务器(目前只有JCache规范)
预览)您可以使用在任何
应用程序或集群中的应用程序
如果您需要在服务器之间共享数据,您可以在@Remote Interface上公开您的业务方法,或者使用JMX共享/发布/使用
具体的选择应该取决于您的应用程序业务逻辑。虽然不传递参数首先不是一个好主意,但如果您“必须”找到一个解决方案,并且它与您的设计相匹配,那么使用内部类如何?这样,您就可以将类变量声明为非静态的,并且始终可以从内部类访问它 将其添加为请求属性。但在这种情况下,我必须传递请求,对吗?听起来是个非常糟糕的主意。人们不鼓励使用全局变量有一个很好的理由。重新检查你想象中的任何需求来激发这一点。好吧,不管怎样,你都在传递这个请求。在大多数情况下,通过许多过滤器,最终到达servlet或JSP页面。您是否可以尝试将所需变量放入单例对象或静态类中,并在整个流中使用它,然后在下一个请求时重置?你可以使用映射来跟踪变量,基于时间戳作为键,但我必须将请求作为参数传递,对吗?传递到什么?传递到我的类中的方法,或者从请求中提取你需要的东西并传递下去。是的,我知道,我的问题是,我是否可以使它们在类中可见,而不需要将它们作为参数传递。我将用一个例子来更新这个问题。