学无先后,达者为师

网站首页 编程语言 正文

Spring Boot之Dao、Service、Controller通过注解委托给Spring容器

作者:LeBron Le 更新时间: 2022-07-16 编程语言

1. 概述

定义数据访问组件AlphaDao、业务组件AlphaService、控制器AlphaController,并通过注解的方式将它们委托给Spring容器。

2. 数据访问组件AlphaDao

package com.nowcoder.community.dao;

public interface AlphaDao {

    String select();

}

2.1 Dao接口的两个实现类

AlphaDao接口有两个实现类:AlphaDaoHibernateImplAlphaDaoMyBatisImpl
其中,由于添加了@Primary注解,所以AlphaDaoMyBatisImpl的优先级更高。

2.1.1 类AlphaDaoHibernateImpl

package com.nowcoder.community.dao;

import org.springframework.stereotype.Repository;

@Repository("alphaHibernate")
public class AlphaDaoHibernateImpl implements AlphaDao {

    @Override
    public String select() {
        return "Hibernate";
    }

}

2.1.2 类AlphaDaoMyBatisImpl

package com.nowcoder.community.dao;

import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Repository;

@Repository("alphaBatis")
@Primary
public class AlphaDaoMyBatisImpl implements AlphaDao {

    @Override
    public String select() {
        return "MyBatis";
    }
}

3. 业务组件AlphaService

通过注解@Autowired注入AlphaDao,然后调用该接口的select()方法。

package com.nowcoder.community.service;

import com.nowcoder.community.dao.AlphaDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Service
//@Scope("prototype")
public class AlphaService {

    @Autowired
    private AlphaDao alphaDao;

    public AlphaService() {
        System.out.println("实例化AlphaService");
    }

    @PostConstruct
    public void init() {
        System.out.println("初始化AlphaService");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("销毁AlphaService");
    }

    public String find() {
        return alphaDao.select();
    }

}

4. 控制器AlphaController

通过注解@Autowired注入AlphaService,然后调用该接口的find()方法。

package com.nowcoder.community.controller;

import com.nowcoder.community.service.AlphaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/alpha")
public class AlphaController {

    @Autowired
    private AlphaService alphaService;

    @RequestMapping("/hello")
    @ResponseBody
    public String sayHello() {
        return "Hello Spring Boot.";
    }

    @RequestMapping("/data")
    @ResponseBody
    public String getData() {
        return alphaService.find();
    }
}

5. 开发过程思想

  1. controller处理浏览器请求,处理请求的过程中调用service层业务组件,业务组件会调用dao层去访问数据库,彼此相互依赖,就可以调用依赖注入的方式实现。
  2. controller在处理请求的过程中会先注入service,再写一个getData()方法,即调用了service业务组件的find()方法,而service的find()方法是通过调用dao的select()方法实现的。

原文链接:https://blog.csdn.net/hutianle/article/details/125804362

栏目分类
最近更新