Educoder Spring 初体验

目录

第1关:创建博客系统中的对象

参考代码

第2关:Spring 框架创建对象

参考代码


第1关:创建博客系统中的对象

任务描述

本关任务:创建“博客系统”中的对象。

编程要求

在开始学习 Spring 框架之前我们先使用我们熟悉的方式(new对象的方式创建java对象)来创建“博客系统”中的所需对象并调用他们的方法,具体要求如下:

  • 三个实体类(用户User、博客Blog、评论Comment)已经创建完成,并且有相应方法,可在右侧文件夹中查看。

  • 在服务类Service中,集成了一些功能,需要你根据提示完成该类中的四个方法,在方法中创建对象并调用对象的相应方法。

  • 最后在客户端(Task类)中调用服务类的方法,首先注册,再登录,然后创建博客和发布评论。

完成任务后我们思考一下,使用 Java 的原生方法创建对象会出现什么问题?如果我们要更换博客类型( MarkDownBlog )又该如何修改代码?

测试说明

平台会对你编写的代码进行测试:

预期输出:

用户注册

用户登录

创建博客

发布评论


参考代码

Service.java

package com.educoder.step1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.educoder.bean.Blog;
import com.educoder.bean.Comment;
import com.educoder.bean.User;

public class Service {

    /********** Begin **********/
    public void login() {
        // TODO 创建 user对象 调用登录方法
        User user = new User();
        user.login();
    }
    public void register() {
        // TODO 创建 user对象,调用注册方法
        User user = new User();
        user.register();
    }
    public void createBlog() {
        // TODO 创建博客对象,调用创建博客方法
        Blog blog = new Blog();
        blog.createBlog();
    }
    public void createComment() {
        // TODO 创建评论对象,调用创建评论方法
        Comment comment = new Comment();
        comment.createComment();
    }
    /********** End **********/
    
}

Task.java

package com.educoder.step1;

import com.educoder.bean.User;
import com.educoder.bean.Blog;
import com.educoder.bean.Comment;

public class Task {
    public static void main(String[] args) {
        /********** Begin **********/
        Service service = new Service();
        service.register();
        service.login();
        service.createBlog();
        service.createComment();
        /********** End **********/
    }
}

Educoder Spring 初体验_第1张图片

第2关:Spring 框架创建对象

任务描述

本关任务:使用 Spring 框架来创建“博客系统”中的对象。

相关知识

我们使用了传统的方式创建对象,本章节我们就来学习如何使用 Spring 创建对象.

使用Spring 的方式创建对象

在上一章节中我们思考了一些问题,那么相信同学们也都想到了直接使用 Java 原生方法创建对象时存在的一些问题:

  1. 每次都需要自己主动创建并销毁对象

  2. 更换博客类型的代价巨大(需要将服务类中的所有原博客对象都替换为MarkDownBlog 博客对象,代码的改动量非常大)

这说明我们编写的程序具有“高耦合性”,面对这类问题我们就可以通过 Spring 来进行改进。

首先,我们在Service类中定义好需要的类属性和方法:

public class Service {

private User user;

private Blog blog;

private Comment comment;

public void login() {}

public void register(){}

public void createBlog() {}

public void createComment(){}

}

现在和上一章节中一样,同样需要在方法里面调用类的方法。那我们使用 Spring 要怎么去实现呢?

我们只需要在Service类上加上一个@Component注解,在Service类属性上面添加@Autowired注解,最后在需要创建的相应对象上也添加@Component注解,就可以了。

下面我们以Blog类为例:

@Component //把对象注册到Spring容器中

public class Service {

   @Autowired

   private Blog blog;

   public void createBlog(){

      blog.createBlog();

   }

}

@Component

public class Blog {

public void createBlog() {System.out.println("创建博客");}

}

 最后我们在客户端调用Service中的方法:

public class Task {

   public static void main(String[] args) {

      ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");      

      //通过Spring容器获取Service对象

      Service service = (Service) app.getBean("service");

   //调用方法

      service.createBlog();

   }

}

这样就完成了使用 Spring 框架来实现相同的功能。并且在这个过程中,我们没有使用new关键字来创建对象。那么这个工作由谁去实现了呢?

实际上是由Spring 容器来帮我们做了这个事情。(后续我们进一步了解)

然后我们再看看ServicecreateBlog()方法中也没有对象的创建,也就是说这个创建对象的过程和结束已经不需要我们来进行管理了,通通由 Spring 来管理。

回到更换博客类型上,这时,我们只需要修改Service中的对象就可以了:

@Component

public class Service {

   @Autowired

   private MarkDownBlog blog; //MarkDownBlog 类上也添加了@Component注解

   //private Blog blog;

   public void createBlog(){

      blog.createBlog();

   }

}

或者,如果你不想修改对象,也是可以的,但是需要你另外创建一个接口,让 Blog 和 MarkDownBlog 同时实现该接口,这样你使用任意对象都可以。

编程要求

在右侧编辑器补充代码,使用 Spring 框架的方式来完成上一关卡的相同任务。

  • Service类中补充相应注解,并在相应方法中调用对象的方法。

  • Task类中完成对服务类的方法调用,顺序仍为注册、登录、创建博客和发布评论。

测试说明

平台会对你编写的代码进行测试:

预期输出:

用户注册

用户登录

创建博客

发布评论


参考代码

Service.java

package com.educoder.step2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.educoder.bean.Blog;
import com.educoder.bean.Comment;
import com.educoder.bean.User;

/********** Begin **********/
@Component
public class Service {

    @Autowired
	private User user;
	
    @Autowired
	private Blog blog;
	
    @Autowired
	private Comment comment;
	
	public void login() {
        user.login();

	}
	
	public void register() {
        user.register();

	}
	
	public void createBlog() {
        blog.createBlog();

	}
	
	public void createComment() {
        comment.createComment();

	}
}

/********** End **********/

Task.java

package com.educoder.step2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.educoder.bean.User;

public class Task {
	
    public static void main(String[] args) {
    	ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过Spring容器获取Service对象
    	Service service = (Service) app.getBean("service");
    	/********** Begin **********/
        service.register();
    	service.login();
        service.createBlog();
        service.createComment();
        /********** End **********/
	}

}

Educoder Spring 初体验_第2张图片

你可能感兴趣的:(JAVA,Spring,spring,java,jvm)