Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring-将自定义实例传递给构造函数_Java_Spring_Command Query Separation - Fatal编程技术网

Java Spring-将自定义实例传递给构造函数

Java Spring-将自定义实例传递给构造函数,java,spring,command-query-separation,Java,Spring,Command Query Separation,我正在尝试将命令查询设计模式实现到 基于MVC spring的应用程序 例如,我有一些使用decorator模式的修饰命令 像下面这样: ICommandHandler handler = new DeadlockRetryCommandHandlerDecorator<MoveCustomerCommand>( new TransactionCommandHandlerDecorator<MoveCustomerCommand>(

我正在尝试将命令查询设计模式实现到 基于MVC spring的应用程序

例如,我有一些使用decorator模式的修饰命令 像下面这样:

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可以用作装饰器的工厂