Java 我们在哪里使用spring框架实现松耦合?
我正在学习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
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()
可以简单地模仿。你能告诉我任何松耦合的例子吗?