MVC三层架构、Springboot IOC容器以及DI依赖注入

三层架构
在这里插入图片描述

controller:只负责接收请求,响应数据----调用Service层业务

而service只处理业务逻辑,具体数据要通过Dao层获取

Dao将数据返回给Service进行处理,再将结果返回给Controller层,然后响应给前端

控制反转、依赖注入

背景:
在这里插入图片描述
Controller耦合Service,一旦service名称改变,就需要手动去controller层改动代码
解决方案

private EmpService empService = new EmpServiceA();
//1.改为,不能直接用会报空指针异常。
private EmpService empService;

//2.还需把new EmpServiceA()对象放在一个容器里,用到哪个对象就从容器中查询

在这里插入图片描述

问题一

对象如何交给容器管理?

答:控制反转 IOC

对象的创建控制权由程序自身转移到外部容器

问题二

容器如何为程序提供所需要的资源对象?

答:依赖注入 DI

容器为应用程序提供运行时所依赖的资源

在这里插入图片描述

Bean对象

IOC容器中创建、管理的对象,称之为bean

如何实现IOC&DI

  1. 将Service层和Dao层的实现类,交给IOC容器管理,成为IOC容器中的bean对象----@Component
  2. 为Controller和Service注入运行时依赖的对象----@Autowired

运行时,IOC容器会提供该类型的bean对象,并赋值给该变量
在这里插入图片描述
在这里插入图片描述
一般使用@RestController、@Service、@Repository在三层上

如果有其他类(不属于这三层,比如:工具类)需要加到IOC容器,这时可以使用@Component

注意:

@Repository(value=“daoB”) //设置EmpDaoB别名
在这里插入图片描述
注意:

  1. 使用@Autowired注解:默认按照类型装配。一个接口只能对应一个IOC容器管理的bean对象。如果有两个,dao—daoA,daoB就会报错,不能完成自动装配
  2. 解决方案:
    在这里插入图片描述
    如果需要存在多个相同的bean----@Primary/@Qualifier/@Resource

@Primary:在其中一个实现类上加,设置这个实现类的优先级先注入,自动注入这个类

@Qualifier:指定bean的名字(spring提供)
在这里插入图片描述
@Resource:指定bean对象。(jdk提供)

  1. @Autowired和@Resource区别
    在这里插入图片描述

Bean组件扫描

1.手动----@ComponentScan,让Springboot能够扫描到(不推荐!!!)

用这个之后需要指定扫描的包,以及启动类所在的包(会覆盖默认的@SpringbootApplication,需要重新指定)

2.把所有类放在启动类所在的包/子包下
在这里插入图片描述

### Spring 框架概述 Spring 是一个轻量级的企业级 Java 开发框架,旨在简化企业应用开发。其核心特性之一是依赖注入(Dependency Injection, DI),也称为控制反转(Inversion of Control, IoC)。IoC 容器负责管理对象生命周期及其相互之间的关系,从而实现组件间的松散耦合[^1]。 ```java // 示例:定义 Bean 并由 Spring 管理 @Component public class ExampleBean { private final AnotherBean anotherBean; @Autowired public ExampleBean(AnotherBean anotherBean) { this.anotherBean = anotherBean; } } ``` ### Spring MVC 工作流程 Spring MVC 是基于请求驱动的 Web 层框架,遵循模型视图控制器设计模式。当客户端发起 HTTP 请求时,前端控制器 DispatcherServlet 接收该请求并将其分派给相应的处理器 Handler。处理完成后返回 ModelAndView 对象给前端控制器,最终渲染成页面响应给用户[^2]。 ### MyBatis 数据持久层技术 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL 查询、存储过程以及高级映射功能。开发者可以通过 XML 或注解方式编写原生数据库操作语句,并利用缓存机制提高性能效率。传统 JDBC 编程相比,减少了大量模板代码的工作量。 ```xml <!-- MyBatis Mapper 文件片段 --> <mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" resultType="User"> SELECT * FROM users WHERE id=#{id}; </select> </mapper> ``` ### Spring Boot 应用程序特点 作为新一代微服务架构下的解决方案,Spring Boot 极大地提升了项目搭建速度和便捷程度。内置了多种常用第三方库的支持,默认采用约定优于配置原则减少繁琐设置工作。更重要的是,能够创建独立运行的应用程序包,如 JAR 文件形式直接部署到生产环境当中去[^4]。 ### AOP 切面编程简介 面向切面编程 Aspect-Oriented Programming (AOP) 主要用于分离横切关注点逻辑,比如日志记录、权限验证等功能模块不再散布于业务代码之中而是集中在一个地方维护。借助代理模式可以在不修改原有函数的基础上增强行为表现力。 ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com..service.*.*(..))") public void logServiceMethodCall() { System.out.println("Logging service method call"); } } ``` ### JavaScript 和 jQuery 脚本语言介绍 JavaScript 是一种广泛应用于浏览器端交互效果制作的语言工具集;而 jQuery 则是对前者进行了封装优化后的类库集合体,极大降低了 DOM 操作复杂度提高了跨平台兼容性水平。两者配合 AJAX 技术可以轻松实现实时数据交换更新局部区域内容无需刷新整个网页界面。 ```javascript $(document).ready(function(){ $("button").click(function(){ $.ajax({ url:"/example", success:function(result){ $("#div1").html(result); } }); }); }); ``` ### HTML5/CSS3 页面布局标准说明 HTML5 引入了许多新的标签元素使得文档结构更加清晰易读便于搜索引擎抓取解析;CSS3 新增样式属性让视觉呈现更为丰富多彩满足多样化需求场景。二者相辅相成共同构成了现代网站的基础建设基石。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值