万字解析 | 深入浅出Spring 框架,原来以前白学了(精华帖收藏)

目录

1. 为啥要用 Spring

2. Spring 简介

3. 环境搭建

4. IOC

4.1 IOC 简介

4.2 Spring 核心内容描述

4.3 IOC 优点

5. DI

5.1 set 注入

5.2 构造注入

5.3 注入总结

6. Bean 的生命周期

6.1 创建阶段

6.2 初始化阶段

6.3 销毁阶段

7. Bean 的后置处理

8. 代理设计模式

8.1 为啥要用代理设计模式?

8.2 代理设计模式

8.3 静态代理

8.4 动态代理

8.5 动态代理实现原理

9. AOP

9.1 AOP 概念

9.2 AOP 底层实现原理

9.2.1 JDK 动态代理

9.2.2 Cglib 动态代理

9.2.3 Spring 如何创建代理对象?

9.3 基于注解开发 AOP

9.4 切入点表达式

10. Spring 相关注解

10.1 创建对象相关注解

10.1.1 @Component

10.1.2 @Component 衍生注解

10.1.3 @Scope

10.1.4 生命周期相关注解

10.2 注入相关注解

10.2.1 @Autowired

10.2.2 @Resource

10.2.3 案例

10.3 Spring 配置文件相关注解

10.3.1 @Configuration

10.3.2 @Bean

10.3.3 @ComponentScan

11. 注解小案例


1. 为啥要用 Spring

张三是一个编程小白,他每次在 service 层写代码都要自己 new 一堆 Dao 接口的实现类。

public class ProjectServiceImpl implements ProjectService {
    UserDao userDao = new UserDaoImpl();
    ProjectSectionDao projectSessionDao = new ProjectSessionDaoImpl();
    ProjectDao projectDao = new ProjectDaoImpl();
    SupplyDao supplyDao = new SupplyDaoImpl();
    .......   
}
复制代码

有一天正 new 着对象,张三心想:"我这一个 service 都需要 new 好多 Dao ,那如果有一堆 service ,那我不得花费好长时间?"

"有没有一个工具类或者什么框架能帮我管理这些对象?我只需要配置一下,需要的时候它就能自动帮我 new 个对象出来?"

张三陷入了深深的沉思之中。

张三的室友李四也是一个编程小白。

李四呢想给自己的小项目增加一个功能:记录方法执行的时间。结果他脑子一热竟然给所有的方法都增加了一堆打印方法:

System.out.println("项目开始执行");
// 开始时间
long start = System.currentTimeMillis();

// 业务代码

// 结束时间
long end = System.currentTimeMillis();
// 计算执行时间
System.out.printf("执行时间:%d 毫秒.", (end - start));
复制代码

过了半个小时,李四终于给项目中所有的方法都复制粘贴上了打印语句。他长舒一口气:"我真是个大聪明!"

张三看了一眼李四的代码,连连鼓掌:"妙啊!咱们宿舍的技术大神!"

旁边的王五实在忍不住了,对张三说:"妙个屁!最近的 Spring 框架课你俩是不是都没去?光顾着打游戏了?我都替你俩答了三次到了!"

李四问王五:"这个Spring 框架学了有用吗?"

王五:"不仅能解决张三说的管理对象的问题,还能帮你解决记录日志的问题。配置完 Spring ,你只需要定义一个切面类,根本不需要在一堆类上面复制粘贴一堆代码。"

张三摸摸后脑勺笑着说:"原来 Spring 框架那么好用,我以后再也不逃课了。我这就去翻课本学习 Spring 框架去。"

2. Spring 简介

Spring 是一个轻量级的 Java 开发框架。Spring 的核心是控制反转(IOC)和面向切面编程(AOP)。

Spring 主要有如下优点:

1.解耦

2.支持面向切面编程

3.便于集成其他框架

3. 环境搭建

1.创建 Maven 项目

File -> New -> Project -> Maven

2.引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.16.RELEASE</version>
    </dependency>
</dependencies>
复制代码

3.创建接口和实现类

UserService

public interface UserService {
    void print();
}
复制代码

UserServiceImpl

public class UserServiceImpl implements  UserService{
    @Override
    public void print() {
        System.out.println("hello world");
    }
}
复制代码

4.创建配置文件

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="userService" class="com.xxl.service.impl.UserServiceImpl"/>
</beans>
复制代码

5.测试

@Test
public void testSpring(){
    // 1、获取工厂
    ApplicationContext act = new ClassPathXmlApplicationContext("/applicationContext.xml");
    // 2、通过工厂类获得对象
    UserService userService = (UserService)act.getBean("userService");
    // 3.调用方法
    userService.print();
}
复制代码

测试结果:

4. IOC

4.1 IOC 简介

IOC,全称 Inversion of Control,意思是控制反转。它是 Spring 框架中的一种思想。

控制反转就是将对象的控制权从程序中的代码转移到了 Spring 的工厂,通过 Spring 的工厂完成对象的创建以及赋值。

也就是说之前是我们自己 new 对象、给对象中的成员变量赋值。现在是让 Spring 来帮助我们创建对象、给成员变量赋值。

4.2 Spring 核心内容描述

1.配置文件

Spring 的配置文件可以放到项目中的任意一个地方,也可以随意命名,但是建议使用:applicationContext.xml。

你可以将这个配置文件看成一个装有一堆 bean 标签的容器。

2.bean 标签

Spring 工厂创建的对象,叫做 bean,所以一个 bean 标签代表一个对象。

<bean id="userService" class="com.xxl.service.impl.UserServiceImpl"/>
复制代码

bean 标签中必须要有 class 属性,它的值是一个类的全限定名(包名+类名)。

除了 c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值