我有一个直接提供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).
我有一个方法,返回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不是输入任何内容?
提前致谢.
我在用木偶编码地狱的文件.即使是最简单的尝试也行不通:
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)
但:
更新:这里是约翰评论中提到的HEX数据(查看时vi :%!xxd):
0000000: efbf bdef bfbd efbf bdef bfbd efbf bdef ................
0000010: bfbd 0a ...
Run Code Online (Sandbox Code Playgroud)
更新:正如彼得的评论中所述,直接运行hiera并未提供任何进一步的见解.特别是,我只能在服务器上试用它,因为代理没有源.

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