• Educoder Spring 初体验


    目录

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

    参考代码

    第2关:Spring 框架创建对象

    参考代码


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

    任务描述

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

    编程要求

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

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

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

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

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

    测试说明

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

    预期输出:

    用户注册

    用户登录

    创建博客

    发布评论


    参考代码

    Service.java

    1. package com.educoder.step1;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.stereotype.Component;
    4. import com.educoder.bean.Blog;
    5. import com.educoder.bean.Comment;
    6. import com.educoder.bean.User;
    7. public class Service {
    8. /********** Begin **********/
    9. public void login() {
    10. // TODO 创建 user对象 调用登录方法
    11. User user = new User();
    12. user.login();
    13. }
    14. public void register() {
    15. // TODO 创建 user对象,调用注册方法
    16. User user = new User();
    17. user.register();
    18. }
    19. public void createBlog() {
    20. // TODO 创建博客对象,调用创建博客方法
    21. Blog blog = new Blog();
    22. blog.createBlog();
    23. }
    24. public void createComment() {
    25. // TODO 创建评论对象,调用创建评论方法
    26. Comment comment = new Comment();
    27. comment.createComment();
    28. }
    29. /********** End **********/
    30. }

    Task.java

    1. package com.educoder.step1;
    2. import com.educoder.bean.User;
    3. import com.educoder.bean.Blog;
    4. import com.educoder.bean.Comment;
    5. public class Task {
    6. public static void main(String[] args) {
    7. /********** Begin **********/
    8. Service service = new Service();
    9. service.register();
    10. service.login();
    11. service.createBlog();
    12. service.createComment();
    13. /********** End **********/
    14. }
    15. }

    第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

    1. package com.educoder.step2;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.stereotype.Component;
    4. import com.educoder.bean.Blog;
    5. import com.educoder.bean.Comment;
    6. import com.educoder.bean.User;
    7. /********** Begin **********/
    8. @Component
    9. public class Service {
    10. @Autowired
    11. private User user;
    12. @Autowired
    13. private Blog blog;
    14. @Autowired
    15. private Comment comment;
    16. public void login() {
    17. user.login();
    18. }
    19. public void register() {
    20. user.register();
    21. }
    22. public void createBlog() {
    23. blog.createBlog();
    24. }
    25. public void createComment() {
    26. comment.createComment();
    27. }
    28. }
    29. /********** End **********/

    Task.java

    1. package com.educoder.step2;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.context.ApplicationContext;
    4. import org.springframework.context.support.ClassPathXmlApplicationContext;
    5. import com.educoder.bean.User;
    6. public class Task {
    7. public static void main(String[] args) {
    8. ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
    9. //通过Spring容器获取Service对象
    10. Service service = (Service) app.getBean("service");
    11. /********** Begin **********/
    12. service.register();
    13. service.login();
    14. service.createBlog();
    15. service.createComment();
    16. /********** End **********/
    17. }
    18. }

  • 相关阅读:
    详解 Wilkinson 功分器
    chatgpt赋能python:Python隐藏变量:探秘程序内部的“奥秘”
    【服务器数据恢复】某云ECS网站服务器mysql数据恢复案例
    完美的PopuWindow展示弹窗
    c++智能指针
    Uni-APP 安卓环境本地打包
    【数字信号处理】离散傅里叶变换(DFT)的性质
    【MATLAB高级编程】入门篇 | 向量化编程
    学会Docker之---应用场景和基本操作
    记一次:jenkins自动化部署服务
  • 原文地址:https://blog.csdn.net/ycq0_9/article/details/127545613