我有一个具有多个屏幕的应用程序,并通过按钮选择每个屏幕.每个屏幕都包含相当重的组件,因此重要的是只有激活屏幕在内存中 - 所有其他屏幕都应该可用于垃圾收集.
该应用程序使用Spring作为粘合剂,目前它使用getBean()切换屏幕:
//event handler for a specific button
public void actionPerformed(Event e) {
setScreen( (Screen) applicationContext.getBean("screen1"));
}
Run Code Online (Sandbox Code Playgroud)
"screen1"是原型bean,因此在按下按钮时会创建一个新的屏幕实例.此外,setScreen()是唯一在应用程序中维护对屏幕的引用的位置,因此之前活动的屏幕可用于垃圾回收.我还没有测试过这个,但我希望它能正常工作 - 这里没有火箭科学!
问题是 - 在阅读了这个页面后,为什么getBean()被认为是坏的 - 我想知道是否有一种更惯用的方法可以在删除对getBean()的依赖时获得相同的结果.
我已经看过方法注入,它在我看来引入复杂性并没什么好处.这是学习的另一个概念,更多魔术,增加对CGLIB的依赖等.如果我真的想要删除对Spring的依赖,我可以引入一个暴露getBean()方法的接口.
getBean()和方法注入是我的唯一选项还是我错过了什么?
如果是这样,getBean()真的那么糟糕吗?
我上周花了很长时间研究序列化.在那段时间里,我发现了很多使用BinaryFormatter或XmlSerializer的例子.不幸的是,我没有找到任何全面详细说明两者之间差异的例子.
我的好奇心的起源在于为什么BinaryFormatter能够直接反序列化到接口而XmlSerializer不能.Jon Skeet在回答" 在运行时转换为多个(未知类型) "时提供了直接二进制序列化到接口的示例.Stan R.在他对" XML Object Deserialization to Interface "的回答中使用XmlSerializer为我提供了实现目标的方法.
除了明显的BinaryFormatter利用二进制序列化,而XmlSerializer使用XML我想更全面地理解基本差异.何时使用其中一种或各自的利弊.
.net c# serialization xml-serialization binary-serialization
由于活动连接,我的SQL Server 2005无法还原备份.我怎么强迫它?
我正在尝试使用C++模板编写一段代码以获得乐趣.
#include <iostream>
#include <vector>
template <class Container>
std::ostream& operator<<(std::ostream& o, const Container& container)
{
typename Container::const_iterator beg = container.begin();
o << "["; // 1
while(beg != container.end())
{
o << " " << *beg++; // 2
}
o << " ]"; // 3
return o;
}
int main()
{
std::vector<int> list;
list.push_back(0);
list.push_back(0);
std::cout << list;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码没有编译:)
在1,2,3处产生相同的错误:错误C2593:'operator <<'是不明确的
我想要做的就是重载<<运算符以使用任何容器.那有意义吗 ?怎么可能呢?如果可能的话,如果不是为什么?
编辑::感谢更正:)'sth'方式是一个很好的解决方案.
我很好奇,如果我们可以使用C++ 0x Concepts,这种模糊性 - 如Neil解释的那样 - 会消失吗?
如果你想改变这种途径进行处理的方式可以做什么,在一个MVC项目或者你有改变的MVC框架?
例如,假设您在Global.asax.cs的RegisterRoutes中有标准代码:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
Run Code Online (Sandbox Code Playgroud)
但是,让我们说你真正想要发生的是让你的自定义类拦截所有传入的请求并以特殊方式路由它们.可以通过从MVC框架类继承然后自定义来完成,或者您是否必须实际更改框架代码?
试图将Java代码移植到C++我偶然发现了一些奇怪的行为.我无法获得双重工作(即使编译器选项/ fp:strict,这意味着在Visual Studio 2008中设置了"正确的"浮点数学).
double a = 0.4;
/* a: 0.40000000000000002, correct */
double b = 0.0 + 0.4;
/* b: 0.40000000596046448, incorrect
(0 + 0.4 is the same). It's not even close to correct. */
double c = 0;
float f = 0.4f;
c += f;
/* c: 0.40000000596046448 too */
Run Code Online (Sandbox Code Playgroud)
在一个不同的测试项目中,我设置它工作正常(/ fp:strict表现符合IEEE754).
使用Visual Studio 2008(标准),无优化,FP:严格.
有任何想法吗?它是真的截断浮动?这个项目在java和C++方面确实需要相同的行为.我通过VC++中的调试窗口读取了所有值.
解决方案: _fpreset(); //巴里凯利的想法解决了它.库正在将FP精度设置为低.
我一直在用电锯远程监控使用log4j的应用程序.我想知道是否有更好的方法,或者可能是另一个日志框架.
我只是想知道是否有办法摆脱r值图中的轴值,分别是x轴或y轴.
我知道这axes = false将摆脱整个轴,但我只想摆脱编号.
我曾经记得看到VS2008的插件或东西.它由Microsoft提供,是最佳实践的一部分.基本上每次项目构建时都会检查代码以确保所有属性都有注释等.
请有人帮我记住它的名字吗?
有没有一种方法来测试JavaScript的键盘事件处理程序(keypress,keyup,keydown事件)?
我知道我可以声明这样的事件处理程序:
function keyUpEvHandler(e) {
... // code here
}
$('#myId').keyup(keyUpEvHandler);
Run Code Online (Sandbox Code Playgroud)
然后在单元测试中运行此函数,但我必须准备事件参数对象与按下实际键时传递的相同:
var e = {keyCode: 70, ...};
Run Code Online (Sandbox Code Playgroud)
有没有办法触发这个事件并传递关键代码作为参数或类似的东西?不幸的是,jQuery trigger()docs不包括键盘事件.
.net ×2
c++ ×2
java ×2
asp.net-mvc ×1
axis-labels ×1
backup ×1
c# ×1
disconnect ×1
events ×1
jquery ×1
log4j ×1
logging ×1
maproute ×1
plot ×1
qunit ×1
r ×1
restore ×1
spring ×1
sql-server ×1
stl ×1
templates ×1
unit-testing ×1
visual-c++ ×1