网易Java Web微专业Spring-IoC容器作业

2016/9/25 posted in  Java  

假设我们有个应用(Application),它包含一个写文件的服务(FileWriterService),该服务在创建时会创建并打开一个文件,销毁时关闭该文件,并且该服务包含一个write(String content)方法:会将content写入到文件中,要求:
1. 使用Spring IoC的相关内容组织该程序;
2. 文件路径通过配置文件(properties)指定;
基本要求:必须附加一个项目说明文档,说明每个功能点对应程序的运行结果(截图),项目的接口说明或者关键代码(不要把全部代码贴出来)等可以反映项目结果的内容。提交作业的时候必须有这个项目说明文档,否则会影响最终评分

程序结构

根据题目要求,程序采用IoC的方式进行组织和构建。

核心代码与结果

  1. FileWriterService接口定义

    public interface FileWirterService {
        public void write(String content);
    }
    
  2. FileWriterService实现类FileWriterServiceImpl

    //声明一个Bean的id
    @Component("fileWriterService")
    public class FileWirterServiceImpl implements FileWirterService{
    
        //通过配置文件获取参数,注入到FileWirterServiceImpl中
        @Value("${filePath}")
        private File file;
        private FileWriter fw;
        //创建时调用,打开一个文件,获取输出流
        @PostConstruct
        public void init() {
            try {
                //判断文件是否存在,如不存在则创建文件
                if (!file.exists()) {
                    file.createNewFile();
                }
                //打开文件
                fw = new FileWriter(file, true);
                System.out.println("打开文件");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public void write(String content) {
            try {
                //向文件中写入内容,并换行
                fw.write(content+"\n");
                System.out.println("文件写入:"+content);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //销毁前调用,关闭文件输出流,释放文件
        @PreDestroy
        public void destory() {
            try {
                //关闭文件的输出流
                if (fw != null) {
                    fw.flush();
                    fw.close();
                }
                System.out.println("关闭文件");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
  3. 读取配置文件获取FilePath参数。

    1. 建立配置文件:writer.properties。写入配置filePath=/Users/zhanjingbo/Desktop/spring.txt,记录文件路径。
    2. 在Spring的application-context.xml中加入读取配置文件的配置。

      <bean id="writerServiceProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
          <property name="location" value="classpath:writer.properties"></property>
      </bean>
      
  4. 编写Application的主类,实现main方法。

    public static void main(String[] args) {
        //加载spring的配置文件,创建容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application-context.xml");
        //通过Bean的id来对FileWriterService进行注入
        FileWirterService fileWriterService = applicationContext.getBean("fileWriterService",FileWirterService.class);
        //调用业务逻辑
        fileWriterService.write("Hello World");
        //关闭容器
        ((ConfigurableApplicationContext)applicationContext).close();
    }
    
  5. 结果展示

    • 控制台的相关输出

    • 文件写入情况