Spring入门教程

朴灿烈づ我的快乐病毒、 2023-10-09 22:18 176阅读 0赞

目录

一、Spring最基本的使用

1.创建Maven项目(不需要模板)

2.添加Spring框架支持

3.添加启动类(没啥可说的符合规范即可)

4.创建bean对象

5.将bean对象注册到Spring中

(a)先在resources文件夹中创建一个xml文件(注意:是test文件用了.xml后缀 不是直接创建一个xml文件)

(b)然后在文件中复制配置代码

(c)然后就可以进行正式的注册bean了

6.取出(使用)bean对象

(a)获取上下文对象

(b)取出bean对象

(c)使用(运行结果)

getbean()的三种用法

1.根据id获取bean(一个String参数)

2.根据class获取bean(一个class参数)

3.根据id和class获取bean(一个String参数和一个class参数)

ApplicationContext和BeanFactory的共同点和不同点

共同点:

不同点:

二、快速存储bean对象

1.创建Maven项目

2.添加Spring框架支持

3.添加启动类

4.创建bean对象

5.复制配置代码

6.添加注解

7.取出bean对象

五大注解

@Bean注解

@Bean的改名功能

三、Bean读取(对象装配\对象注入)

1.属性注入

2.Setter注入

3.构造注入

@Resource注解

Bean的六种作用域:

Spring的主要执行流程

Bean的生命周期



一、Spring最基本的使用

#

1.创建Maven项目(不需要模板)

注意路径要全英文,路径带中文可能会导致不可预知的错误

#

2.添加Spring框架支持

在pom.xml文件中添加依赖

2d86d5fbaf27468ca5505bc5008cee4c.png

ed604c3388f44a71bba803bb0009006e.png

可直接复制以下代码

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework</groupId>
  4. <artifactId>spring-context</artifactId>
  5. <version>5.2.3.RELEASE</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework</groupId>
  9. <artifactId>spring-beans</artifactId>
  10. <version>5.2.3.RELEASE</version>
  11. </dependency>
  12. </dependencies>

注意复制依赖后 不要忘记手动导入

IDEA中直接点击这个d98f93a819e547b78044f406fb8c7198.png

#

3.添加启动类(没啥可说的符合规范即可)

e761b2170b3b4606bd72a93e752e4531.png

#

4.创建bean对象

就是创建一个普通的类

9f8a7b02521d4e2d8e2e3cfc1fe38d3c.png

#

#

5.将bean对象注册到Spring中

(a)先在resources文件夹中创建一个xml文件(注意:是test文件用了.xml后缀 不是直接创建一个xml文件)

af223fdf4cd74805aca482f4c39b395d.png

8aa0bb67041e4ac49e23f99525cae661.png

(酱紫操作)

(b)然后在文件中复制配置代码

724f168c4bc74a9ea961ca05140c0e60.png

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. </beans>

(c)然后就可以进行正式的注册bean了

bfece36cd4e6414aa6ef5ef70d50183e.png

每注册一个bean 就在这加一行标签

id是自定义的名称 class是要注册的bean类名

6.取出(使用)bean对象

2d2cc0707b7342b582dbae28f0c8072f.png

在主类中取出对象

(a)获取上下文对象

  1. ApplicationContext context = new ClassPathXmlApplicationContext("Spring.xml");

这个参数就是我们上一步中自己创建的xml文件名

(b)取出bean对象

  1. Test test = (Test)context.getBean("bro");

这个参数是我们自己规定的id

这个类名就是步骤4中自己写的类名

(c)使用(运行结果)

3562246115df41f2964b276386344a4d.png

可以看出已经成功了

getbean()的三种用法

1.根据id获取bean(一个String参数)

  1. Test test = (Test)context.getBean("bro");

2.根据class获取bean(一个class参数)

  1. Test test = context.getBean(Test.class);

已经知道它的类型了就不用强转类型了

注意如果同一个类(bean)被注册多次的话会报错

3.根据id和class获取bean(一个String参数和一个class参数)

  1. Test test = context.getBean("bro",Test.class);

ApplicationContext和BeanFactory的共同点和不同点

共同点:

都用来获取Spring上下文对象

不同点:

1.继承关系和功能: ApplicationContext属于BeanFactory 子类,ApplicationContext具备了BeanFactory 所有的功能和能力。BeanFactory只具备最基础访问Bean 的能力。ApplicationContext 具备更多能力,比如国际化支持、资源访问支持等…
2.性能和加载方式: BeanFactory 按需加载,当需要使用Bean 的时候再加载; ApplicationContext一次性加载所有的Bean。

二、快速存储bean对象

1.创建Maven项目

2.添加Spring框架支持

3.添加启动类

4.创建bean对象

前四步和上面一样

5.复制配置代码

还是在resources中创建一个.xml文件(强调!和上次相同 是test格式文件 只是命名用.xml后缀)

f686d97f220b4d008ee511cc95fc39c8.png

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:content="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  6. <content:component-scan base-package="Beans"></content:component-scan>
  7. </beans>

这个红色框出的是自定义参数:在哪个范围内搜索bean对象

0bb184420a954a9b8250be06d5ec99ee.png

我在java目录下创建了一个Beans包专门保存bean对象 所以这个参数填Beans

6.添加注解

在要注册的bean类上面加注解(有五种类注解 下面会详细介绍)

6d1ded91cf3f4f6ba674c907b69ce9cb.png

7.取出bean对象

我们这次没有在.xml文件里面指定id 那么我们怎么找到这个bean呢?

807ed87f82914d7db84825ff7679ad32.png

bean对象默认id为将类名首字母小写

如Test -> test

特殊情况:当类名首字母和第二个字母均为大写时 自动命名为原类名

TEst -> TEst

143f2387040241d38bd293fde4054951.png

启动类上是要引用对应类的

五大注解

@Controller [控制器]验证前端传递的参数的(安全检查)
@Service [服务层] 服务调用的编排和汇总
@Repository [仓库(数据仓库….) ](直接操作数据库)
@Component [组件] 通用化的工具类
@Configuration [配置]项目的所有配置

这五大注解的用法都是一样的,功能上没有本质差异,使用不同的注解只是代码规范,增加可读性而已

(在SpringMVC中可不一样啊啊)@Controller、@Service、@Repository、@Configuration都是基于@Component实现的

@Bean注解

@Bean注解是方法注解要和五大注解搭配使用 且适用于有返回对象的方法

首先我们先创建一个想要使用的类

  1. public class Test {
  2. public void hello(){
  3. System.out.println("hello");
  4. }
  5. }

然后在用另一个类去实现Bean注解把它存在Spring中

  1. package Beans;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.stereotype.Controller;
  4. @Controller
  5. public class BeanTest {
  6. @Bean
  7. public Test test(){
  8. return new Test();
  9. }
  10. }

然后在运行类里面调用

557049c2dda74ec192c3e3efb9963af6.png

@Bean的改名功能

那么我们绕这么多弯弯 实现了原来的功能 这有什么意义呢?

那么久引出了@Bean注解的特殊功能! 改名!

还是原来的程序,在@Bean后面加了参数

d827faf356d24b348249a69c0e5ac622.png

运行时就会报错

把运行类的getBean参数改成 @Bean的参数

b6b7f762833941cd89bde4a68fcf5817.png

运行成功!

@Bean的参数有三种写法

@Bean(name = “test1”)

@Bean(“test1”) (相较于上一种省略了name=)

@Bean(name = {“test1”,”test2”}) (一个Bean起多个名字)

三、Bean读取(对象装配\对象注入)

把Bean存入Spring之后的使用,要比获取上下文对象再getbean简单

1.属性注入

在一个类中 把bean作为类对象注入

  1. @Controller
  2. public class Demon1 {
  3. @Autowired
  4. private Test test;
  5. public void mysout(){
  6. test.hello();
  7. }
  8. }

创建了一个Demon类 在里面属性注入test

439aced9ca4c4717964486c492c9ad23.png

启动类中调用Demon1 运行成功

(如果你是在其他包中创建的另一个类 记得在.xml中包含新的包)

属性注入优点:简单!

缺点: 1.不能注入final修饰的属性

2.只适用于IoC容器

3.因为简单,滥用风险大(容易违背单一设计原则)

2.Setter注入

66e999342aa94078858e2aaa427d54d0.png

(直接右键生成一个Setter方法 在上面加@Autowired)

优点:符合单一设计原则(一个Setter只针对一个对象)

缺点:

1.不能注入一个不可变对象(final)

2.注入对象可能被改变

3.构造注入

b86f2a63720d45aba1f8c45a5c921d74.png

右键生成大法万岁!

构造方法是官方推荐的注入方法!

优点:

1.可以注入final修饰的(final自身决定的 可以在两种情况下赋初值1.创建时 2.构造方法 也就解释了为什么前两种不可以)

2.注入对象不会被修改(构造方法只调用一次)

3.依赖对象在被使用前一定会被初始化

4.通用性好,因为构造方法是JDK自带的

没有缺点!如果注入太多参数是程序员的问题(?)

@Resource注解

@Resource注解可以实现属性注入和Setter注入,不能实现构造注入(使用方法)

@Autowired注解是Spring提供的,@Resource是来自JDK下的注解,所以@Resource的通用性更好 @Resource有更多的参数设置

Bean的六种作用域:

作用域就是生命周期,默认情况下 作用域是singleton(单例模式)

1.singleton(单例模式) 只有一个全局对象

单例模式会出现一种问题,就是有一个类,这个类本身的内容是A,这时候甲同学根据自己的需求把它修改成了B,然后乙同学再去使用这个类 它的内容就改变了

2.prototype(原型模式) 每次访问都会创建一个对象

3.request(请求作用域)(只能在Spring MVC中使用) 每次Http请求都会创建一个对象

4.session(会话作用域)(只能在Spring MVC中使用) 每次会话都会创建一个对象(即使是同一个用户)

5.application(全局作用域)(只能在Spring MVC中使用)一个http servlet context中共享一个对象

6.websocket:Http WebSocket作用域(只能在WebSocket中使用)

Bean的作用域设置

一、枚举

32477da536b14433ade7ee88e5e47d9f.png

枚举方式好一点 因为有自动补全机制

二、参数

92eaad2a36014261b0665df1a7eff9e6.png

Spring的主要执行流程

1.启动容器(启动类运行、加载配置容器)

2.Bean初始化(对配置文件中的Bean进行扫描 只扫描带有注解的)

3.将Bean对象注入到容器中

4.使用Bean

5.Spring销毁

Bean的生命周期

1.实例化(分配内存空间 不是初始化)

2.设置属性(依赖注入)

3.初始化

执行各种通知(方法)(各种 Aware 方法,如 BeanNameAware、BeanFactoryAware、 ApplicationContextAware 的接口方法)

执行前置方法(BeanPostProcessor )

初始化方法(@PostConstruct和init-method )

初始化后置方法(BeanPostProcessor)

4.使用Bean

5.销毁Bean(执行destroy-method|@PreDestroy)

发表评论

表情:
评论列表 (有 0 条评论,176人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring 框架——spring入门教程

    打个广告,帮朋友卖点东西,东西超便宜的哟【衣服鞋子等】,厂家直接出货,绝对低于市场价!!! 一般都比市场价便宜3—7折【都是牌子货】,如果您感兴趣,可以扫描屏幕下方的二维码,感