java 为什么我们需要在Spring Boot 使用豆类?[复制]

7eumitmz  于 2023-01-11  发布在  Java
关注(0)|答案(4)|浏览(84)

此问题在此处已有答案

What in the world are Spring beans?(14个答案)
9分钟前就关门了。
我刚刚开始使用spring Boot ,我不明白为什么我要使用bean而不是创建自己的对象。我创建的对象和spring创建的对象(bean)有什么区别?
我试着做一个bean,它比创建一个普通对象需要更多的编码,我必须学习如何使用ApplicationContext,getBean等。

xriantvc

xriantvc1#

简短回答:Spring bean =对象。
长回答:允许Spring将所有对象注入到依赖它们的类中要比创建自己的IoC容器更容易。
在此阅读更多信息:https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/beans.html

qeeaahzv

qeeaahzv2#

@Bean注解基本上用于将类定义为Object,是的,您是对的,创建bean最初需要比直接创建类的对象更多的编码,但是您是否想过,假设您使用new关键字创建了对象,并且在许多地方创建了此对象,假设在1000个地方创建,如果您必须更改对象中的任何内容,这将使您变得复杂,因为您必须去所有1000个地方并改变它,但是当你使用bean时,你需要在一个地方做这些改变,在所有其他地方,它会自动反映,同样在这种情况下,我们不需要编译你的整个代码,这就是为什么我们使用@bean,同样它会非常有助于使你的代码松散耦合

7ajki6be

7ajki6be3#

Spring是一个允许你使用依赖注入的框架,这意味着框架可以为你构建类示例(bean),你只需声明bean之间的依赖关系,我建议你熟悉一下dependency injection

@Bean
public class SuperHeavyService {

   // the datasource is build by the framework due to configuration
   private Datasource connection;
   private HttpClient client;

   // 
   public SuperHeavyService(Datasource connection, HttpClient client) {

     this.connection = connection;
     this.client = client;
   }
}

@Bean
public class HttpClient {
}

上面的例子显示了SuperHeavyService是由框架创建的,框架将使用SuperHeavyService类的构造函数注入requires类型,这就是依赖注入。

c2e8gylq

c2e8gylq4#

我们使用bean主要是为了实现松耦合。当你自己创建对象时,这些对象是紧耦合的。想象一下一个应用程序有几十个甚至几百个类。有时我们想在整个应用程序中共享一个类的单个示例,有时我们需要为每个用例提供一个单独的对象,等等。
管理如此多的对象无异于一场噩梦,这就是控制反转的用武之地。
对象可以从IoC容器中检索依赖项,而不是自己构造依赖项,我们所要做的就是为容器提供适当的配置元数据。
使用IOC,您可以实现松耦合。
松耦合意味着类大部分是独立的。如果类A对类B的唯一了解是类B通过其接口暴露的内容,则类A和类B被称为松耦合。为了克服对象之间紧耦合的问题,Spring框架借助POJO/P模型使用依赖注入机制,通过依赖注入实现松耦合。示例:如果你换了衬衫,你就不会被迫改变你的身体--当你能做到这一点时,你就有了松耦合。当你不能做到这一点时,你就有了紧耦合。松耦合的例子有接口、JMS。
说明松散耦合概念的Java程序

public interface Topic
{
    void understand();
}
class Topic1 implements Topic {
public void understand()
    {
        System.out.println("Got it");
    }
} class Topic2 implements Topic {
public void understand()
    {
        System.out.println("understand");
    }
} public class Subject {
public static void main(String[] args)
    {
        Topic t = new Topic1();
        t.understand();
    }
}

说明:在上面的例子中,Topic 1和Topic 2对象是松耦合的,这意味着Topic是一个接口,我们可以在运行时注入任何实现的类,我们可以为最终用户提供服务。
希望有帮助。

相关问题