Java 我们在哪里使用spring框架实现松耦合?

Java 我们在哪里使用spring框架实现松耦合?,java,spring,factory-pattern,Java,Spring,Factory Pattern,我正在学习spring框架。我从网站上读了很多教程,但是我无法得到它们的解释。请简单地给我解释一下 在这里,我将工厂设计模式用于实现松耦合,以及我们如何在Spring中使用此设计模式 我无法理解这一点(句子)“这种模式提供了创建对象的最佳方式之一” 输出: Inside Circle::draw() method. Inside Rectangle::draw() method. Inside Square::draw() method. 春天: 您可以将工厂声明为@Component或@B

我正在学习spring框架。我从网站上读了很多教程,但是我无法得到它们的解释。请简单地给我解释一下

  • 在这里,我将工厂设计模式用于实现松耦合,以及我们如何在Spring中使用此设计模式

  • 我无法理解这一点(句子)“这种模式提供了创建对象的最佳方式之一”

    输出:

    Inside Circle::draw() method.
    Inside Rectangle::draw() method.
    Inside Square::draw() method.
    
  • 春天: 您可以将工厂声明为
    @Component
    @Bean
    ,然后将其自动连接到代码中需要的任何位置

    因此,您将避免调用它的构造函数,工厂的单例实例将在应用程序启动时加载到applicationContext中

    工厂: 工厂的目的是将实例创建的所有逻辑包装到工厂的方法中,以简化对象创建。如果您在许多地方多次需要相同的对象,您可以避免构造函数调用和将值传递给setter,而只调用单个工厂方法。

    Spring: 您可以将工厂声明为
    @Component
    @Bean
    ,然后将其自动连接到代码中需要的任何位置

    因此,您将避免调用它的构造函数,工厂的单例实例将在应用程序启动时加载到applicationContext中

    工厂:
    工厂的目的是将实例创建的所有逻辑包装到工厂的方法中,以简化对象创建。如果您在许多地方多次需要相同的对象,您可以避免构造函数调用和将值传递给setter,而只调用单一的工厂方法。

    这里使用的是一个经典工厂,它在每次调用时创建新实例。 但是工厂忽略了两点:
    getShape()
    应该提供一个静态方法,工厂类不应该多次实例化。

    对工厂类使用单例和静态方法会带来一些缺点:测试期间的模拟更加复杂,工厂会增加其职责(它是单例,但也是工厂类),应用程序的类(客户端类和工厂类)之间会产生高度耦合。
    Spring提供的依赖注入(但不是唯一的)解决了这些问题。
    Spring确实扮演了工厂的角色,单例问题也由Spring处理

    在春天,你有一些方法来做一件足够相似的事情:

    • 使用工厂bean和工厂方法。您有一个XML和一个Java版本。
      XML方式就是XML方式:如果您喜欢直接注释类而不是创建间接方式来读取使用过的Spring配置,那么XML方式就很冗长,不一定合适。
      Java版本没有间接寻址的缺点,但它有点冗长,因为您的工厂类必须实现Spring
      FactoryBean
      接口

    • 使用带有
      原型
      范围注释的经典Springbean。

    弹簧中的等效物可以是:

    @Bean
    @Scope("prototype")
    public Shape shape(String shapeType) {   
          if(shapeType == null){
             return null;
          }     
          if(shapeType.equalsIgnoreCase("CIRCLE")){
             return new Circle();
    
          } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
             return new Rectangle();
    
          } else if(shapeType.equalsIgnoreCase("SQUARE")){
             return new Square();
          }
    
          return null;   
    }
    
    无论如何,您都应该使用
    BeanFactory
    ApplicationContext
    Object getBean(字符串名称、对象…参数)
    方法来传输
    shapeType
    参数。

    例如:

    Shape shape = (Shape) applicationContext.getBean("shape", "CIRCLE");
    

    这里使用一个经典工厂,它在每次调用时创建新实例。 但是工厂忽略了两点:
    getShape()
    应该提供一个静态方法,工厂类不应该多次实例化。

    对工厂类使用单例和静态方法会带来一些缺点:测试期间的模拟更加复杂,工厂会增加其职责(它是单例,但也是工厂类),应用程序的类(客户端类和工厂类)之间会产生高度耦合。
    Spring提供的依赖注入(但不是唯一的)解决了这些问题。
    Spring确实扮演了工厂的角色,单例问题也由Spring处理

    在春天,你有一些方法来做一件足够相似的事情:

    • 使用工厂bean和工厂方法。您有一个XML和一个Java版本。
      XML方式就是XML方式:如果您喜欢直接注释类而不是创建间接方式来读取使用过的Spring配置,那么XML方式就很冗长,不一定合适。
      Java版本没有间接寻址的缺点,但它有点冗长,因为您的工厂类必须实现Spring
      FactoryBean
      接口

    • 使用带有
      原型
      范围注释的经典Springbean。

    弹簧中的等效物可以是:

    @Bean
    @Scope("prototype")
    public Shape shape(String shapeType) {   
          if(shapeType == null){
             return null;
          }     
          if(shapeType.equalsIgnoreCase("CIRCLE")){
             return new Circle();
    
          } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
             return new Rectangle();
    
          } else if(shapeType.equalsIgnoreCase("SQUARE")){
             return new Square();
          }
    
          return null;   
    }
    
    无论如何,您都应该使用
    BeanFactory
    ApplicationContext
    Object getBean(字符串名称、对象…参数)
    方法来传输
    shapeType
    参数。

    例如:

    Shape shape = (Shape) applicationContext.getBean("shape", "CIRCLE");
    

    你们是在哪里实现松耦合的?用弹簧。1)
    ApplicationContext
    是一个Spring类。客户端与它耦合,而不是与工厂类耦合。2)
    shape()
    可以简单地模仿。你能告诉我任何松耦合的例子吗?你在哪里实现的松耦合?用弹簧。1)
    ApplicationContext
    是一个Spring类。客户端与它耦合,而不是与工厂类耦合。2)
    shape()
    可以简单地模仿。你能告诉我任何松耦合的例子吗?