我是Spring的新手。我正面临Spring-Boot的问题。我正在尝试将外部配置文件中的字段自动装配到自动装配的bean中。我有以下类
应用程序。Java语言
public class App {
@Autowired
private Service service;
public static void main(String[] args) {
final SpringApplication app = new SpringApplication(App.class);
//app.setShowBanner(false);
app.run();
}
@PostConstruct
public void foo() {
System.out.println("Instantiated service name = " + service.serviceName);
}
}
AppConfig。Java语言
@Configuration
@ConfigurationProperties
public class AppConfig {
@Bean
public Service service() {
return new Service1();
}
}
服务接口
public interface Service {
public String serviceName ="";
public void getHistory(int days , Location location );
public void getForecast(int days , Location location );
}
服务1
@Configurable
@ConfigurationProperties
public class Service1 implements Service {
@Autowired
@Value("${serviceName}")
public String serviceName;
//Available in external configuration file.
//This autowiring is not reflected in the main method of the application.
public void getHistory(int days , Location location)
{
//history code
}
public void getForecast(int days , Location location )
{
//forecast code
}
}
我无法在App类的postconstruct方法中显示服务名称变量。我这样做对吗?
考虑到你的类App
注释有@SpringBootApplication
和App
类在顶部包中,你可以把你的serviceName
放在application.properties
中,并使用@Value("${serviceName}")
注入它。不要在类上使用@Component
如果您已经在配置上使用@Bean
,它会发生冲突,因此@Autowire
与@Value
有关更多信息,请参阅文档
你会以这样的结尾
@Service // @Component specialization
public class Service1 implements Service {
@Value("${serviceName}")
public String serviceName;
//Available in external configuration file.
//This autowiring is not reflected in the main method of the application.
public void getHistory(int days , Location location)
{
//history code
}
public void getForecast(int days , Location location )
{
//forecast code
}
}
当您有@组件/@服务/@存储库时,不需要@Bean声明
@Configuration
public class AppConfig { //other stuff here not duplicated beans }
还有你的主课
package com.app;
@SpringBootApplication // contains @EnableAutoConfiguration @ComponentScan @Configuration
public class App {
@Autowired
private Service service;
public static void main(String[] args) {
final SpringApplication app = new SpringApplication(App.class);
//app.setShowBanner(false);
app.run();
}
@PostConstruct
public void foo() {
System.out.println("Instantiated service name = " + service.serviceName);
}
}
您可以通过不同的方式加载属性:
想象一下下面的application.properties,它是由spry-boot自动加载的。
spring.app.serviceName=Boot demo
spring.app.version=1.0.0
>
使用@Value注入值
@Service
public class ServiceImpl implements Service {
@Value("${spring.app.serviceName}")
public String serviceName;
}
使用@ConfigurationProperties注入值
@ConfigurationProperties(prefix="spring.app")
public class ApplicationProperties {
private String serviceName;
private String version;
//setters and getters
}
您可以使用Autowired从另一个类访问此属性
@Service
public class ServiceImpl implements Service {
@Autowired
public ApplicationProperties applicationProperties;
}
正如您所注意到的,前缀将是spring。app然后spring boot将属性前缀与之匹配,并查找服务名称和版本,然后将注入值。
我正在使用Swing和Spring创建一个金融应用程序。在应用程序的一部分中,我有一个,其中包含应用程序中每个的。单击时,我希望在中显示类型的。这都是在下面的控制器中执行的。 会为每个点击更改,因此我将设置为一个原型bean,因此我将为每个帐户接收一个新实例。为了使原型作用域工作,我需要使用。以下是代码: 您将注意到我试图自动连接类型的bean。但是,该bean没有正确地自动连接,它是空的。以下是
我在spring中定义了一个映射: 然后我将这个bean自动转换为一个属性,该属性定义为: 干杯。
我创建了自己的库(com.custom.mylib),它返回一个字符串,如下所示。 我创建了一个将使用上述库的项目。我已将lib作为pom依赖项包含在内。但是当我尝试从我的应用程序调用库方法时。我得到了下面的错误。如何解决它? 请考虑在您的配置中定义一个“com.custom.mylog.MyLibrary”类型的bean。 我在application.properties文件中也有下面的内容,这
我通过Spring Boot 1.1.8使用Spring 4,并创建了一个类来缓存一些数据。这个类依赖于泛型来工作,但我在Spring和将这个类自动连接为另一个服务中的bean方面遇到了问题。 我会遇到如下错误: 所涉及的班级: 类BaseRepository扩展JpaRepository如下。其他实际存储库扩展了这个。 BaseWithName类是一个MappedSuperclass,它定义名称
出于某种原因,我使用外部属性源,其中一个外部属性源没有自动连接,在创建身份验证bean时接收空指针 原因: org.springframework.beans.BeanInstantiationException: Failed to instanceiate [com.filechecker.check.Authenticator]: Constructor threw exception;ne
问题内容: 可以与列表一起使用吗? 就像我有带有mimetypes的属性文件,而在我的班级文件中,我有类似的东西 问题答案: Spring 4支持自动收集给定类型的所有bean并将其注入到集合或数组中的能力。 例: