小编mmo*_*sen的帖子

有没有办法覆盖组件扫描发现的bean?

我有一个直接提供fooBean的java配置类和通过组件扫描提供barBean.

@Configuration
@ComponentScan(basePackages = { "com.blah" })
public class Config {

    @Bean
    public FooBean fooBean {
        return new FooBean();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在测试用例中重用它,我需要用模拟替换bean:

@Configuration
@Import(Config.class)
public class TestConfig {

    @Bean
    public FooBean fooBean {
        return new FooBeanMock();
    }

    @Bean
    public BarBean barBean {
        return new BarBeanMock();
    }
}
Run Code Online (Sandbox Code Playgroud)

(这里重用Config没有多大意义,但在现实生活中我有1000豆,我只需要模拟一些)

这里fooBean被覆盖,但不是barBean.

Skipping loading bean definition for %s: a definition for bean " + "'%s' already exists. This is likely due to an override in XML.
Run Code Online (Sandbox Code Playgroud)

还有一个官方问题:https: //jira.springsource.org/browse/SPR-9682

有人知道覆盖组件扫描发现的bean的任何解决方法吗?

考虑到bean是遗留代码并且无法修改,并且其依赖项没有setter(私有属性+ @Resource).

spring dependency-injection spring-annotations spring-3

14
推荐指数
1
解决办法
1万
查看次数

使用通配符和通配符的问题

我有一个方法,返回map定义为:

public Map<String, ?> getData();
Run Code Online (Sandbox Code Playgroud)

这个方法的实际实现对我来说并不清楚,但是,当我尝试这样做时:

obj.getData().put("key","value")
Run Code Online (Sandbox Code Playgroud)

我得到以下编译时错误消息:

方法put(String,capture#9-of?)在Map类型中不适用于参数(String,String)

问题是什么?是String不是输入任何内容?

提前致谢.

java generics arguments wildcard map

11
推荐指数
3
解决办法
1万
查看次数

用Puppet编码地狱

我在用木偶编码地狱的文件.即使是最简单的尝试也行不通:

hiera-data/test.yaml:
---
test: Äñö

init.pp:
  $test = hiera('test')
  file { "/root/encoding.txt":
    ensure  => file,
    content => $test
  }
Run Code Online (Sandbox Code Playgroud)

在puppet服务器上一切都很好看:

puppet:~ # file -i /etc/puppetlabs/puppet/hiera-data/env/test.yaml
/etc/puppetlabs/puppet/hiera-data/env/test.yaml: text/plain charset=utf-8
puppet:~ # cat /etc/puppetlabs/puppet/hiera-data/env/test.yaml
---
test: Äñö
puppet:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

在傀儡代理人:

puppet-test:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

跑完后:

puppet-test:~ # file -i encoding.txt
encoding.txt: text/plain charset=utf-8
Run Code Online (Sandbox Code Playgroud)

但:

cat encoding.txt

更新:这里是约翰评论中提到的HEX数据(查看时vi :%!xxd):

0000000: efbf bdef bfbd efbf bdef bfbd efbf bdef  ................
0000010: bfbd 0a                                  ...
Run Code Online (Sandbox Code Playgroud)

更新:正如彼得的评论中所述,直接运行hiera并未提供任何进一步的见解.特别是,我只能在服务器上试用它,因为代理没有源. 在此输入图像描述

我的环境已经过时,但我不允许使用任何更新的版本(至少还没有,没有任何好的理由):

  • SuSE Enterprise …

ruby encoding puppet

11
推荐指数
1
解决办法
371
查看次数