能@Component,@Repository并@Service注释互换在Spring中,还是他们提供任何特殊的功能,除了作为一个符号设备?
换句话说,如果我有一个Service类并且我将注释更改@Service为@Component,它仍然会以相同的方式运行吗?
或者注释是否也会影响类的行为和功能?
我是否正确,认为@Bean和@Component注释是相同的,但首先是类,另一个是方法?
在这两种情况下,容器只会创建适当的bean,对吧?
当我使用Spring框架时,我经常看到2个基于Java和基于注释的配置/自动装配术语。
基于Java的与基于注释的配置/自动装配是否有所不同?
如果它们不同,您能告诉我它们之间有什么不同吗?
以Spring @Autowired和@Qualifier为参考
我们有以下示例可解决自动装配冲突:
public interface Vehicle {
public void start();
public void stop();
}
Run Code Online (Sandbox Code Playgroud)
有两个bean,Car并Bike实现Vehicle接口。
@Component(value="car")
public class Car implements Vehicle {
@Override
public void start() {
System.out.println("Car started");
}
@Override
public void stop() {
System.out.println("Car stopped");
}
}
@Component(value="bike")
public class Bike implements Vehicle {
@Override
public void start() {
System.out.println("Bike started");
}
@Override
public void stop() {
System.out.println("Bike stopped");
}
}
@Component
public class VehicleService {
@Autowired
@Qualifier("bike")
private Vehicle …Run Code Online (Sandbox Code Playgroud) 从软件设计的角度来看,什么时候应该使用@Component而不是传统的Java类(需要通过“ new”显式实例化)?例如,如果我们需要创建以下模式之一的类:
适配器
桥
正面
战略
译者
类是否应该具有@Component注释(或任何Spring衍生注释,例如@Repository/ @Controller/ @Service)?
我正在尝试学习SpringMVC Web应用程序中的setter注入,我可以找到所有示例,并使用展示了xml。但是,有人告诉我不建议使用xml,所有新应用程序都应使用java配置来完成。这是错误的,我应该使用xml来配置我的应用程序吗?
我应该在哪里声明bean,我该怎么做?
这是我所看到的示例之一,但是它是使用xml实现的。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="message"
class="org.springbyexample.di.xml.SetterMessage">
<property name="message" value="Spring is fun." />
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud) 我对春天的一些事感到困惑.
首先,我什么时候想在一个显式的@Configuration类上使用@Component和一个@Bean来实现@Component?
我可以考虑使用@Component的唯一原因是在@Configuration类中保存自己创建的@Bean方法.还有其他原因吗?
也就是说,如果我使用@Configuration类,我似乎可以手动编写这些bean的接线.IOW,我在@Component上使用@Inject我现在可以在@Bean构造函数中显式指定依赖项(当我在bean方法中创建它时).那么我什么时候想使用@Inject?我觉得我要在这里挖一个兔子洞.
是否有任何好的教程或博客涵盖了做出这些决定的最佳实践或规则?
谢谢
对您来说这可能是一个非常简单的问题,但是我阅读了许多文档并且感到非常困惑。我们可以使用@Component而不是@Bean或@Bean来代替@Component(以及@Repository @Service @Controller)吗?
干杯
我试图更好地理解 Spring 框架,我的问题基本上是:与 @Service/@Controller/@Repository (或 @Component,如果不是其他 3 个)相比,@Configuration 注释有什么好处?
据我了解,@Configuration 是 bean 的来源,但是通过仅用 @Service 等标记我的类,它就变成了一个 bean,并且会被组件扫描拾取?
据我了解,我可以拥有一个 @Configuration 类,该类具有创建几个 bean(例如某些服务)的方法,或者直接使用 @Service 注释类。
拥有 @Configuration 类有什么好处?或者 @Configuration 对于我错过的一些边缘情况最有用?
我在某处读到@Value注释可以在@Configuration注释的类中使用,但是我可以在我们的代码库中看到我们在其他没有@Configuration标记的地方使用它,所以这似乎不是必需的
有人告诉我这里有一个线程: What is the Difference between @Configuration and @Component in Spring?
但我觉得它只是开始解释注释之间的区别,而不是何时/使用一个注释相对于另一个注释的好处是什么。
谢谢!
在 JavaConfig 中定义 bean 与仅注释类有何不同?
Java配置:
@Configuration
public class AppConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean () {
SomeFilter filter = new SomeFilter();
return SomeFilter;
}
Run Code Online (Sandbox Code Playgroud)
注释类
@Bean
public class SomeFilter extends FilterRegistrationBean {
}
Run Code Online (Sandbox Code Playgroud) 前端开发人员正在研究我的第一个Java Spring Boot API。我已经阅读了许多有关Spring / Spring Boot中“最佳实践”的文章,并且一直在尝试重构我的代码以遵循这些实践。
下面有一个通用类的示例,该类用于处理各种服务的所有HTTP请求。最初,我用@Component注释对此类进行注释,但是正如我提到的那样,我试图学习并遵循Spring的“最佳实践”。我尤其有兴趣实施本文有关最佳实践的内容(本文编号3和4)。那就是说应该避免使用@component,因为我们不想与Spring框架紧密耦合,而我们想避免“整个类路径扫描”。
@Slf4j
public class HttpService {
private HttpServletRequest request;
private RestTemplate restTemplate;
public HttpService(HttpServletRequest request, RestTemplateBuilder restTemplateBuilder) { ... }
public String get(String url, String id) { ... }
}
Run Code Online (Sandbox Code Playgroud)
使用@component注释,我的服务可以按预期工作,但是当我删除它时,出现异常:
org.springframework.beans.factory.NoSuchBeanDefinitionException:没有合格的bean类型
在Java中,这似乎是一个非常常见的例外,因为存在很多问题,但是这些解决方案对我而言并不奏效。
我希望社区能够帮助我回答以下两个问题: