学习Spring第一天

Author Avatar
人不如故 10月 19, 2017
  • 在其它设备中阅读本文章

在xml中装载Bean实体


首先新建一个实体类 HelloWorld.java

public class HelloWorld{
    private String name;

    public void setName(String name){
        this.name = name;
    }

    public void printHello(){
        System.out.println("Spring 4: Hello!" + name);
    }  
}

一个实体类就创建完成了,接下来我们在xml中注册这个实体类.

在resources文件夹下创建applicationContext.xml

代码结构如上,我们在xml中配置beans.

<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-4.0.xsd">

    <bean id="helloBean" class="com.demo.Entity.HelloWorld">
        <property name="name" value="RenBuRuGu"/>
    </bean>
</beans>

其中id为bean的唯一编号,每一个实体类都需要注册成一个bean。class为对应的entity,property为属性值,对应着HelloWorld里的name,spring会根据setName函数自动为name赋值.
完成了这一步之后,下面我们来编写一个测试函数调用一下.

在com.demo根目录下创建App.java.

public class App {
    public static void main(String[] args){

        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");

        HelloWorld helloWorld = context.getBean("helloBean");

        helloWorld.printHello();
    }

}

我们通过ClassPathXmlApplicationContext获取xml的bean实体,然后通过Spring的IOC从容器中获取HelloWorld.

运行结果如下.


Spring的松耦合机制

下面为大家介绍一下Spring的松耦合机制.

项目结构如下:

如果我们想实现一个可以用Csv和Json格式输出的功能,稍微有点经验的java程序员可能会把输出功能抽象成一个接口然后分别实现.

先创建一个输出功能的interface

public interface IOutputGenerator{
    void generateOutput();
}

然后我们创建两个类分别去实现这个接口.
CsvOutputGenerator

public class CsvOutputGenerator implements IOutputGenerator {

    @Override
    public void generateOutput(){
        System.out.println("Csv Output Generator");
    }
}

JsonOutputGenerator

public class JsonOutputGenerator implements IOutputGenerator {

    @Override
    public void generateOutput(){
        System.out.println("Json Output Generator");
    }
}

如果我们想要在业务逻辑代码中使用输出功能,有如下三个方法:

IoutputGenerator output = new CsvOutputGenerator();

output.generateOutput();

这种方式肯定是不好的,如果需求变了或者需要使用新的Generator,必须在所有引用到的地方都手动修改,这种方式的工作量是巨大的.

public class OutputHelper{
    private IOutputGenerator output;

    public OutputHelper(){
        this.output = new CsvOutputGenerator();
    }

    public generateOutput(){
        output.generateOutput();
    }

}

当我们需要使用的时候直接调用OutputHelper就可以了.

OutputHelper helper = new OutputHelper();

helper.generateOutput();

这种方法比第一种好,当需求改变时(比如从csv变成json),我们只需要在OutputHelper里手动修改就好了.

第三种方法是用Spring的松耦合机制.
我们先在xml中配置bean.

Spring-common.xml

<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-4.0.xsd">
    <bean id="outputHelper" class="com.demo.Helper.OutputHelper">
        <property name="outputGenerator" ref="csvOutputGenerator"/>
    </bean>
    <bean id="csvOutputGenerator" class="com.demo.Generator.CsvOutputGenerator"/>
    <bean id="jsonOutputGenerator" class="com.demo.Generator.JsonOutputGenerator"/>
</beans>

OutputHelper

public class OutputHelper {

    private IOutputGenerator outputGenerator;

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

    public void generatorOutput() {
        outputGenerator.generateOutput();
    }
}

我们现在可以这么使用它:

public class App {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Spring-common.xml");
        OutputHelper outputHelper = (OutputHelper) context.getBean("outputHelper");

        outputHelper.generatorOutput();
    }
}
坚持原创技术分享,您的支持将鼓励我继续创作!