我正在寻找有关如何将运行时依赖项注入从Hibernate检索的JPA实体的建议.我的问题基本上是这样的:
我有一些Transaction对象的不同子类.每个Transaction子类在执行时都有不同的行为,并且需要与环境不同的一组依赖项.这些Transaction对象由Hibernate作为JPA实体进行管理,因此我不能有效地使用Guice进行依赖注入来填充实例及其环境依赖性,就像我在其余的应用程序中一样.
为了解决这个问题,我采用了一种类似于访问者模式的方法,如下所示:
public abstract class Transaction {
// ...snip...
public abstract void apply(Transactor transactor);
}
public class TransactionA extends Transaction {
public void apply(Transactor transactor) {
transactor.execute(this);
}
}
public class TransactionB extends Transaction {
public void apply(Transactor transactor) {
transactor.execute(this);
}
}
// other Transaction subclasses with the same boilerplate
public interface Transactor {
public void execute(TransactionA trans);
public void execute(TransactionB trans);
// corresponding methods for other transaction types.
}
public class BeginTransactor {
@Inject
private Foo execAdep; …Run Code Online (Sandbox Code Playgroud) 我最近学习了Ruby编程语言,总而言之,它是一门很好的语言.但我很惊讶地发现它并不像我预期的那么简单.更准确地说,"最不惊讶的规则"对我来说似乎并不受到尊重(当然这是非常主观的).例如:
x = true and false
puts x # displays true!
Run Code Online (Sandbox Code Playgroud)
和着名的:
puts "zero is true!" if 0 # zero is true!
Run Code Online (Sandbox Code Playgroud)
你会警告一个Ruby新手的其他"问题"是什么?
是否可以在同一个HTML文件中使用2个具有相同名称的CSS类?如果是这样,你如何在造型元素之间区分两者?
鉴于这样的类:
class Foo {
public:
Foo(int);
Foo(const Foo&);
Foo& operator=(int);
private:
// ...
};
Run Code Online (Sandbox Code Playgroud)
这两条线是完全相同的,还是它们之间有细微差别?
Foo f(42);
Foo f = 42;
Run Code Online (Sandbox Code Playgroud)
编辑:通过在原始问题中使Foo构造函数"显式",我感到困惑.我删除了,但欣赏答案.
我还添加了一个复制构造函数的声明,以明确复制可能不是一个简单的操作.
我真正想知道的是,根据C++标准,"Foo f = 42"会直接调用Foo(int)构造函数,还是会调用复制构造函数?
看起来fasih.ahmed有我正在寻找的答案(除非它是错的).
任何人都可以解释我,什么是MVC,为什么我们使用它以及我们如何使用它.使用这个的好处?我们可以在ASP.NET 2.0中使用ASP.NET MVC(VS 2005)
我知道我可以通过使用-D参数传递参数来为Tomcat指定系统属性,例如" -Dmy.prop = value ".
我想知道是否有更简洁的方法通过在context.xml文件或其他一些tomcat配置文件中指定属性值来实现此目的.我想这样做是因为,首先,跟踪我的属性更容易,其次,我有多个上下文运行,我不知道如何通过-D参数指定特定于上下文的属性.
我使用的是Tomcat 5.5版.
我有一个配置文件,开发人员可以通过传入一个字符串来指定文本颜色:
<text value="Hello, World" color="Red"/>
Run Code Online (Sandbox Code Playgroud)
而不是有一个巨大的开关语句寻找所有可能的颜色,只是使用类System.Drawing.Brushes中的属性而不是内部我可以这样说:
Brush color = Brushes.Black; // Default
// later on...
this.color = (Brush)Enum.Parse(typeof(Brush), prasedValue("color"));
Run Code Online (Sandbox Code Playgroud)
除了刷子/画笔中的值不是枚举.所以Enum.Parse没有给我带来快乐.建议?
有没有人知道是否有一个事实上的标准(即TR1或Boost)C++函数对象来访问std :: pair的元素?在过去24小时内,我曾两次希望我有类似keysPerl哈希函数的功能.例如,在std :: map对象上运行std :: transform并将所有键(或值)转储到另一个容器会很不错.我当然可以编写这样一个函数对象,但我更愿意重用那些有很多眼球的东西.
我注意到,通过查看boost/stl,甚至阅读一些顶级c ++专家的着作,get/set不是c ++方式.
有没有人在他们的c ++类设计中使用get/set,并且如果这个范例属于c ++世界,有人可以建议一个经验法则吗?
它显然在Java中非常流行,并且使用Property语法糖来模仿c#.
编辑:
在下面的答案中提供的链接之一中阅读了更多相关信息之后,我遇到了至少一个参数,用于保持成员字段的访问者与成员字段的名称相同.也就是说,您可以简单地将成员字段公开为public,而是将其作为类的实例,然后重载()运算符.通过使用set/get,您不仅要强制客户端重新编译,还要实际更改其代码.
不确定我是否喜欢这个想法,对我来说似乎有点太精细了,但更多细节在这里:
我想在我的application.config文件中存储log4net配置数据.根据我对文档的理解,我做了以下工作:
添加对log4net.dll的引用
在AssemblyInfo.cs中添加以下行:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Run Code Online (Sandbox Code Playgroud)按如下方式初始化记录器:
private static readonly ILog log = LogManager.GetLogger(typeof(frmWizard));
Run Code Online (Sandbox Code Playgroud)我的app.config中有以下代码:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
但是,当我运行该应用程序时,我在控制台上收到以下错误:
没有找到名为[Consoleappender]的追加器.
如何让log4net从配置文件中读取设置?
谢谢!