2、spring的松耦合示例

说明:在实际的开发项目中,一般都比较庞大,如果处理不当,会导致对象的依赖关系将一直紧密联系在一起,并且难以修改或者管理。在这一种场景下,spring框架的优势便体现出来了—–松耦合。


例子1

说明:运用传统方法输出helloworld语句,主要代码如下

OutputGenerator.java

public interface OutputGenerator {
    public void output();
}

OutputGeneratorImpl.java 实现OutputGenerator接口

import com.main.model.OutputGenerator;
public class OutputGeneratorImpl implements OutputGenerator{
    public void output() {
        System.out.println("hello world");
    }
}

测试方法

    @Test
    public void testOutputGenerator(){

        OutputGeneratorImpl output = new OutputGeneratorImpl();

        output.output();

    }

输出结果为 helloworld
缺点:用这种传统的方式可以实现output方法输出helloworld语句,但是OutputGenerator与OutputGeneratorImpl紧密地联系在一起,假如OutputGenerator类需求有变化,则需要改动代码的地方就会非常多


例子2

依然运用例子1中的OutputGenerator类和OutputGeneratorImpl类,并且再增加一个辅助类,用于输出

OutputGeneratorService

import com.main.impl.OutputGeneratorImpl;
import com.main.model.OutputGenerator;

public class OutputGeneratorService {

    OutputGenerator outputGenerator;

    //default constructor
    public OutputGeneratorService(){
        outputGenerator = new OutputGeneratorImpl();
    }
    public void output(){

        outputGenerator.output();
    }
}

测试方法

    @Test
    public void testOutputGeneratorService(){
            OutputGeneratorService service = new   OutputGeneratorService();
        service.output();
    }

运行结果依然为:hello world
改进:增加一个辅助类来管理类的依赖关系,使得代码的耦合程度不再那么紧密
存在问题:输出的变化依然涉及一部分代码的更改


例子3:运用spring的依赖注入(DI)

修改例子2的OutputGeneratorService

import com.main.impl.OutputGeneratorImpl;
import com.main.model.OutputGenerator;

public class OutputGeneratorService {

    OutputGenerator outputGenerator;

    //default constructor
    public OutputGeneratorService(){

    }
    public void setOutputGenerator(OutputGenerator outputGenerator){
        this.outputGenerator = outputGenerator;
    }
    public void output(){

        outputGenerator.output();
    }
}

增加一个spring bean的配置文件,并且生命java 对象的依赖关系



<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="OutputGeneratorService"
        class="com.main.service.OutputGeneratorService">
        <property name="outputGenerator" ref="OutputGeneratorImpl"/>
    bean>
    <bean id="OutputGeneratorImpl"
        class="com.main.impl.OutputGeneratorImpl">bean>

beans>

测试方法

    @Test
    public void testSpringOutput(){
        ApplicationContext context = 
                   new ClassPathXmlApplicationContext(new String[] {"beans.xml"});
        OutputGeneratorService service =(OutputGeneratorService)context.getBean("OutputGeneratorService");
        service.output();
    }

输出结果依然为hello world
改进之处:现在只需要修改spring的配置文件即可实现不同的输出,而不需要修改代码

你可能感兴趣的:(spring学习教程,Spring基础教程)