我对从abstract
类扩展的Spring beandefaultconfigurationservice
初始化有一个问题。我完全卡住了。
类hiearchy如下所示:
public interface ConfigurationService {
TaxPayer getTaxPayer();
}
提到该类对需要初始化的服务很有用:
public abstract class BaseInitializationAwareService {
private boolean initialized = false;
public abstract void initialize();
protected void checkInitialization() {
if (!initialized) {
initialize();
}
}
protected void setInitialized() {
this.initialized = true;
}
}
public abstract class BaseConfigurationService extends BaseInitializationAwareService implements ConfigurationService {
}
public class DefaultConfigurationService extends BaseConfigurationService {
private TaxPayerService taxPayerService;
@Autowired
public void setTaxPayerService(TaxPayerService taxPayerService) {
Assert.notNull(taxPayerService);
this.taxPayerService = taxPayerService;
}
public void initialize() {
Optional<TaxPayer> dbtaxPayer = taxPayerService.getActiveTaxPayer();
if (!dbtaxPayer.isPresent()) {
throw new IllegalStateException("Tax payer setting not found!");
}
this.taxPayer = dbtaxPayer.get();
setInitialized();
}
// the rest omitted...
}
创建defaultconfigurationservice
bean时:
@Bean
public BaseConfigurationService configurationService() {
DefaultConfigurationService configurationService = new DefaultConfigurationService();
configurationService.initialize();
return configurationService;
}
则defaultconfigurationservice
中的纳税人服务
为null-似乎没有自动连线。
它能否与defaultconfigurationservice
是从抽象类扩展而来的这一事实相联系?
@Bean
public TaxPayerService taxPayerService() {
DatabaseTaxPayerService taxPayer = new DatabaseTaxPayerService();
return taxPayer;
}
这个bean可能从未初始化过...
这是个例外:
org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“WebSecurityConfig.APISecurity”的bean时出错:通过方法“Set ContentNegotationStrategy”参数0表示的不满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatisfieddependencyexception:创建名为“org.springframework.web.servlet.config.annotation.delegatingwebmvcconfiguration”的bean时出错:通过方法“set configurers”参数0表示的不满足依赖项;嵌套异常为org.springframework.beans.factory.unsatisfieddependencyexception:创建名为“password recovercontroller”的bean时出错:通过方法“set userservice”参数0表示的不满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatisfieddependencyexception:创建名为“default userservice”的bean时出错:通过方法“set notificationservice”参数0表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatisfieddependencyexception:创建名称为“notification service”的bean时出错:通过方法“set configurationservice”参数0表示的不满足的依赖关系;嵌套异常为org.springframework.beans.factory.beanCreationException:创建类路径资源[com.example.config/appconfig.class]中定义的名为“configuration service”的bean时出错:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.beanInstantiationException:无法实例化[com.example.services.baseConfigurationService]:工厂方法“configuration service”引发异常;嵌套异常是java.lang.NullPointerException
例如,需要baseConfigurationService
的bean:
public class EmailNotificationService extends BaseService implements NotificationService {
private BaseConfigurationService configurationService;
@Autowired
public void setConfigurationService(BaseConfigurationService configurationService) {
Assert.notNull(configurationService);
this.configurationService = configurationService;
}
// the rest omitted...
}
更新次数1
具有与其他Bean的内部依赖关系的Bean初始化示例:
@Bean
public TransactionDataService transactionDataService() {
return new DefaultTransactionDataService();
}
public class DefaultTransactionDataService implements TransactionDataService {
private PrivateKeyService privateKeyService;
@Autowired
public void setPrivateKeyService(PrivateKeyService privateKeyService) {
Assert.notNull(privateKeyService);
this.privateKeyService = privateKeyService;
}
}
@Bean
public PrivateKeyService privateKeyService() {
return new DefaultPrivateKeyAwareService();
}
而且起作用了。
它与您对Spring如何初始化bean的指导有关:
@bean用于显式声明单个bean,而不是像上面那样让Spring自动完成。它将bean的声明与类定义解耦,并允许您完全按照自己的选择来创建和配置bean。
因此,当您手动创建类的实例时,您也必须手动设置所有类字段。
@Bean
public BaseConfigurationService configurationService() {
DefaultConfigurationService configurationService = new DefaultConfigurationService();
configurationService.setTaxPayerService(taxPayerService());
configurationService.initialize();
return configurationService;
}
@Bean
public BaseConfigurationService configurationService() {
DefaultConfigurationService configurationService = new DefaultConfigurationService(taxPayerService());
configurationService.initialize();
return configurationService;
}
在Springs的最新版本中,我们可以使用注释作为自动连接bean。这将使用bean的类型(或构造函数,如果应用于它的话)自动连接bean。有什么方法可以使用基于bean名称的注释吗?我们在Spring的XML文件中没有注释autowire=“byName”?
我正在编写单元测试,有一个非常复杂的设置。 依赖bean设置一些侦听器,并将它们传递给自动连线服务。 我想测试侦听器是否存在,但不调用它们,因此我想传递'null'而不是自动连线服务。(特别是:我没有二传手…) 请注意,SUT确实间接依赖于返回侦听器的类。 因为这是一个来自大设置的非常小的示例,所以我不想在这里使用mock,因为我只想测试侦听器的存在性而不是行为。 嘲笑20或30个这样的服务会大大
我正在使用< code>MapStruct,为此我必须定义一个具有相应映射函数的接口。通过使用用< code > @ before mapping < code > 和@AfterMapping注释的< code>default方法,可以实现一些逻辑。在这样一个带注释的默认方法中,我想使用我的SpringBoot应用程序的一个配置类。我该怎么做?我可以将这样的配置(bean)自动连接到接口吗?这样
我有一个简单的udp客户机/服务器程序。 如果客户端正在失去连接,或者服务器正在重新启动,客户端不会自动重新连接。我总是要手动重启客户端。 这是我的客户端套接字配置:
我有几个EJB3。x无状态会话bean,未定义接口。我需要将这些bean注入到Springbean中,但我无法这样做。 无接口EJB: 我的豆子: 还有我的豆子。xml 在初始化Spring容器时,我得到以下错误: 异常本身非常清楚——spring容器期望MyBean有一个本地接口视图作为其业务接口;但是,我没有(也不能介绍)。 非常感谢您的帮助!
问题内容: 我正在尝试在32位Linux上使用LiteIDE(Go IDE)。除自动完成功能外,其他所有功能均可用。构建,运行,一切正常。该二进制文件似乎正在运行: 我可能做错了什么? 问题答案: 您可能需要设置GOROOT =。要在LiteIDE中进行设置,请寻找环境工具栏;它应该是一个下拉列表,可能已预先选择了“系统”和一个按钮。单击按钮以显示“编辑环境”窗格,然后双击“ system.env