Java Spring-将自定义实例传递给构造函数
我正在尝试将命令查询设计模式实现到 基于MVC spring的应用程序 例如,我有一些使用decorator模式的修饰命令 像下面这样:Java Spring-将自定义实例传递给构造函数,java,spring,command-query-separation,Java,Spring,Command Query Separation,我正在尝试将命令查询设计模式实现到 基于MVC spring的应用程序 例如,我有一些使用decorator模式的修饰命令 像下面这样: ICommandHandler handler = new DeadlockRetryCommandHandlerDecorator<MoveCustomerCommand>( new TransactionCommandHandlerDecorator<MoveCustomerCommand>(
ICommandHandler handler =
new DeadlockRetryCommandHandlerDecorator<MoveCustomerCommand>(
new TransactionCommandHandlerDecorator<MoveCustomerCommand>(
new MoveCustomerCommandHandler(
new EntityFrameworkUnitOfWork(connectionString),
// Inject other dependencies for the handler here
)
)
);
ICommandHandler处理程序=
新DeadlockRetryCommandHandlerDecorator(
新TransactionCommandHandlerDecorator(
新的MoveCustomerCommandHandler(
新EntityFrameworkUnitOfWork(连接字符串),
//在此处为处理程序注入其他依赖项
)
)
);
如何将这样的处理程序注入控制器构造函数?你应该去哪里
我实例化这个处理程序?一个可以实例化的地方可以是
控制器构造函数,但这不是最佳解决方案。还有其他想法吗
谢谢如果您使用的是PropertyPlaceHolderConfigure(旧)或PropertySourcesPlaceholderConfigurer(新),并且您的连接字符串位于.properties文件或环境变量中,则可以对连接字符串执行以下操作。您还可以将对象自动关联到配置类中,并使用@Bean注释方法,以完成Spring上下文xml的功能。使用这种方法,您可以按照自己的意愿创建bean,并且可以像在xml中定义的那样使用autowire
@Configuration
public class MyAppConfig {
@Autowired private MyType somethingToAutowire;
@Bean
public ICommandHandler iCommandHandler(@Value("${datasource.connectionString}")
final String connectionString) {
return new DeadlockRetryCommandHandlerDecorator<MoveCustomerCommand>();
// You obviously have access to anything autowired in your configuration
// class. Then you can @Autowire a ICommandHandler type into one of your
// beans and this method will be called to create the ICommandHandler (depending on bean scope)
}
}
@配置
公共类MyAppConfig{
@自动连线私人MyType某物到自动连线;
@豆子
公共ICommandHandler ICommandHandler(@Value(${datasource.connectionString}))
最终字符串连接(字符串){
返回新的死锁RetryCommandHandlerDecorator();
//显然,您可以访问配置中自动连接的任何内容
//然后你可以@Autowire一个ICommandHandler类型到你的
//bean和此方法将被调用以创建ICommandHandler(取决于bean范围)
}
}
我不确定您到底想要实现什么,但您可能会考虑bean工厂方法?您可以将所需的依赖项注入到一个bean中,该bean可以用作装饰器的工厂