java 扩展库_java - 提高可扩展的配置对象春天库的明确性 - SO中文参考 - www.soinside.com...

在两个解决您的问题:

1 - 定义一个通用的定制是这样的:

public interface Customizer {

T customize(T t);

boolean supports(Class target);

}

在你的lib你有一个配置:

public class MyConfig {

private String property;

public MyConfig() {

}

public void setProperty(String property) {

this.property = property;

}

}

所以你的默认配置应该是这个样子:

@Configuration

public class DefaultConfiguration {

@Autowired(required = false)

private List customizers;

@Bean

public MyConfig myConfig() {

MyConfig myConfig = new MyConfig();

myConfig.setProperty("default value");

if (customizers != null) {

for (Customizer c : customizers) {

if (c.supports(MyConfig.class)) {

return (MyConfig) c.customize(myConfig);

}

}

}

return myConfig;

}

}

这样一来,用户应该做的,每当他想定制你的bean的唯一的事情就是实现定制,然后把它声明为一个bean。

public class MyConfigCustomizer implements Customizer {

@Override

public MyConfig customize(MyConfig myConfig) {

//customization here

return myConfig;

}

@Override

public boolean supports(Class> target) {

return MyConfig.class.isAssignableFrom(target);

}

}

他应该把它声明:

@Bean

public Customizer customizer(){

return new MyConfigCustomizer ();

}

我觉得这个回答你的问题,但它的丑陋(uncheched警告和一个列表...)不是最好的,因为一切似乎给用户定制即使它不是。

2 - 我建议你暴露接口,可以由用户调整豆,是这样的:

public interface MyConfigCustomizer{

MyConfig customize(MyConfig config);

}

默认配置:

@Configuration

public class DefaultConfiguration {

@Autowired(required = false)

private MyConfigCustomizer customizer;

@Bean

public MyConfig myConfig() {

MyConfig myConfig = new MyConfig();

myConfig.setProperty("default value");

if (customizer != null) {

return customizer.customize(myconfig);

}

return myConfig;

}

}

这样一来,用户就知道的myconfig可以调整(而不是全部)的豆类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值