2024/8/31
配置maven
配置pom.xml
在<dependencies></dependencies>中添加依赖
一般添加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!--<version>2.6.6</version>--> </dependency>
搭建Spring Boot
使用@SpringBootApplication标注一个应用程序的主类
@SpringBootApplication
注解使得这个类成为Spring Boot应用的入口。main
方法是Java应用的入口,通过调用SpringApplication.run()
来启动Spring Boot应用。
package org.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class EasySpringAA { //项目启动类 运行起该类 就运行了整个项目 public static void main(String[] args) { SpringApplication.run(EasySpringAA.class,args); } }
约定大于配置
“约定大于配置”(Convention over Configuration)是软件开发中的一个设计原则,尤其在框架设计中常被提及。这个原则的核心思想是:通过合理的默认约定,使得开发者可以在不需要大量显式配置的情况下进行开发。只有在默认约定不适用时,才需要进行额外配置。
IOC
SpringIOC:IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”
将对象的创建和依赖管理的控制权从程序代码手动管理转移到外部框架,从而实现松耦合和更灵活的代码结构。
//springboot提供了很多注解标注类,让spring管理这些类的对象的生命周期 //@Controller(控制类) @RestController(控制类) @Service(业务类) @Repository(Dao类) //@Component(其他功能类) @Bean
依赖注入DI
依赖注入是实现控制反转的一种常用方式,依赖注入的目的是将对象之间的依赖关系从内部实现中剥离出来,通过外部传递的方式来提供依赖对象。
核心思想:传统编程中,对象通常通过在代码中显式创建依赖对象的实例(new),来管理依赖关系。这种方式会导致代码的耦合度很高,难以维护测试。依赖注入通过将对象的创建和依赖关系的管理外包给框架或容器,减少对象之间的耦合度
在Spring中,spring会自动注入依赖关系
TestA testa; @Autowired public void setTesta(TestA testa){ System.out.println("2------注入属性"); this.testa=testa; }
如上,我们在外面声明一个testa,并没new,而在方法中直接使用了
常用注解
@Controller
@Controller是Spring框架中一个注解,用于标记一个类为控制器,表示这个类会处理http请求,并返回视图,负责用户的请求映射到具体的方法
人话:与前端进行交互,接收请求,返回结果。
与ResController类似,但通常是返回一个视图
@Controller public class EasyBController { @RequestMapping("testm") public ModelAndView testM(){ ModelAndView mav=new ModelAndView(); mav.setViewName("index"); mav.addObject("username","张三"); return mav; } }
@ResController
@RestController public class EasyAController { @Autowired TestA test;//用@Autowired注解用于注入依赖,Spring 将会自动找到一个 TestA类型的Bean并注入到test变量中。 @RequestMapping("testa") public String testA(){ test.test(); return "EasyA method"; }
@RequestMapping("testa"):注解用于映射http请求到特定的处理方法中,teata作为url路径被映射到testA()方法上,当用户访问/testa时,会调用该方法并返回方法的返回值
@Service
用于标识一个类是服务层组件。通常定义业务逻辑,通常位于应用程序的业务逻辑层,在典型的三层架构中,@Service
注解的类通常位于服务层,它们调用数据访问层的代码(通常使用 @Repository
注解),并且将处理后的数据返回给控制器层(通常使用 @Controller
或 @RestController
注解)。
@Repository
@Repository
标识一个类是数据访问层组件,表明这个类用于与数据库进行交互。
@Component
@Component
是 Spring Framework 中的一个通用注解,用于标识一个类是 Spring 管理的一个组件(Bean)。它是 Spring 容器中的基础注解,可以用于任何需要被 Spring 容器管理的类上。@Component
是一个通用注解,它可以用于任何层(数据访问层、业务层、表示层等)的类上,而不像 @Controller
、@Service
和 @Repository
那样有特定的用途。
@Bean
@Bean
是 Spring 框架中的一个注解,用于告诉 Spring 容器一个方法将返回一个对象,该对象要被注册为 Spring 应用上下文中的一个 Bean。与 @Component
类似,@Bean
也是用来定义 Spring 管理的 Bean 的方式之一,但它通常用于更灵活或需要显式控制的情况。
@Component | 使用在类上用于实例化Bean |
@Controller | 使用在web层类上用于实例化Bean |
@Service | 使用在service层类上用于实例化Bean |
@Repository | 使用在dao层类上用于实例化Bean |
@Configuration
@Configuration
是 Spring Framework 中的一个注解,用于标识一个类作为配置类。配置类是用来定义 Spring 应用上下文中的 Bean 的类。通过使用 @Configuration
注解,开发者可以在 Java 类中直接定义 Bean,而不必使用 XML 配置文件,从而实现了 Java 配置的方式。
主要特点
-
标识配置类:
@Configuration
注解标识一个类为 Spring 配置类。这些类通常包含了@Bean
注解的方法,这些方法返回的对象会被 Spring 容器管理。 -
定义 Bean:在
@Configuration
类中定义的@Bean
注解方法会被 Spring 容器调用,方法返回的对象会被注册为 Spring 上下文中的 Bean。 -
支持依赖注入:
@Configuration
类支持依赖注入,可以在其方法中注入其他 Bean,并通过方法参数传递给 Bean 的构造函数。 -
容器内置的单例保证:
@Configuration
类中的 Bean 定义方法会被 Spring 容器以单例模式创建和管理,确保同一个 Bean 实例在整个应用程序上下文中只有一个。
StringBean的作用域
//singleton 单例模式 一个对象 默认的Bean的作用域 //prototype 原型模式 每次需要都来一个新的对象 //request web项目中请求作用域 每次请求都会创建一个新的对象 //session 每次会话都会创建一个新的对象 1.默认30分钟没有访问就断掉会话 2.主动退出 //GlobalSession 全局的会话
1. Singleton(单例)
singleton
是Bean的默认作用域。与Java中的单例设计模式类似,但有一些重要的区别。Spring的singleton
作用域确保在整个Spring容器生命周期内,一个Bean类只有一个实例,而这个实例会被共享和复用。- 单一实例:Spring容器中每个
singleton
作用域的Bean在容器中只有一个实例,无论你请求多少次该Bean,得到的都是同一个对象。 - 默认作用域:如果你不为Bean指定作用域,Spring会默认将其设为
singleton
。 - 全局共享:无论在Spring应用上下文中请求多少次,该Bean的实例都是相同的,所有请求者共享这个实例。
- 管理生命周期:Spring容器管理
singleton
Bean的整个生命周期,包括实例化、初始化和销毁。
2. Prototype(原型)
- 每次请求创建新实例:在
Prototype
作用域下,每当你通过Spring容器请求一个Bean时,都会得到一个全新的实例。 - 不共享实例:与
Singleton
作用域共享同一实例不同,Prototype
作用域确保每个依赖此Bean的组件都有自己独立的实例。 - 适用于有状态Bean:如果Bean需要保存不同的状态信息,并且这些状态信息在不同使用者之间不应该共享,那么
Prototype
是合适的选择。
3. Request(请求)
定义:@Scope("request")
说明:在每个 HTTP 请求中,Spring 容器会创建一个新的 Bean 实例。这个作用域只适用于 Web 应用程序。
4. Session(会话)
-
定义:
@Scope("session")
-
说明:在每个 HTTP 会话中,Spring 容器会创建一个新的 Bean 实例。这个作用域只适用于 Web 应用程序。
springbean的生命周期
1--------构造方法
2--------注入属性
3--------BeanNameAware接口的setBeanName方法easyBean
4--------BeanFactoryAware接口的setBeanFactory方法
5--------ApplicationContextAware接口中的ApplicationContext方法
6--------执行BeanPostProcessor接口的before
7--------InitializingBean的afterPropertiesSet方法
8--------init method
9--------执行BeanPostProcessor接口的after