约定大于配置
SpringBoot的约定大于配置,按我的理解是:对比SpringMVC,需要在web.xml里面配置前端控制器,还需要在核心配置文件(*-servlet.xml)中配置视图解析器等,更要配置第三方的Tomcat服务器。而SpringBoot就不需要我们配置这些,他内嵌了Tomcat服务器,我们只需要在Maven配置文件(Pom.xml)里面导入SpringMVC所需要的依赖就可以了。
这就是SpringBoot的优势,在传统所需要配置的地方,SpringBoot都进行了约定(配置好了),开发人员能配置得更少,更直接地开发项目,写业务逻辑代码。
spring boot和maven的约定大于配置体现点:
1.maven的目录文件结构
1)默认有resources文件夹,存放资源配置文件。src-main-resources,src-main-java
默认的编译生成的类都在targetwen。
2)默认有target文件夹,将生成class文件盒编程生成的jar存放在target文件夹下
2.spring boot默认的配置文件必须是,也只能是application.命名的yml文件或者properties文件,且唯一
1)spring boot默认只会去src-main-resources文件夹下去找application配置文件
IoC
Spring的核心之一是IoC,IoC全称为Inversion of Control,中文译为控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。
所谓IoC,对于Spring框架来说,就是由Spring来负责对象的创建、配置和管理,所以可将IoC理解为一个大容器。IOC通过将对象创建和管理的控制权从应用代码转移到Spring容器中,实现了松耦合设计。IoC使用依赖注入(DI)来管理组成一个应用程序的组件,这些对象被称为Spring Beans。
DI
依赖注入(Dependency Injection,简称DI)是一种软件开发技术,其中创建的对象依赖的其他对象不由该对象自身创建,而是由外部容器在运行时注入。这种技术有助于减少代码之间的耦合,提高代码的可测试性和可维护性。
依赖注入的实现方式主要有两种:Setter注入和构造方法注入。Setter注入是通过在被注入类中编写属性的setter方法,然后在配置文件中设置需要注入的属性值。构造方法注入则是通过在被注入类中编写带有参数的构造方法,并在配置文件中通过<constructor-arg>标签进行配置。
依赖注入的主要目的是为了解耦,使得类之间的依赖关系由容器在运行时动态决定,而不是在编译时硬编码。这种方式可以提升代码的重用性和灵活性,使得系统更加模块化和可扩展
Spring Boot 常用注解
@Controller 和 @RestController
@Controller 和 @RestController 注解都可以用来处理 HTTP 请求。@Controller 注解表示这个类是一个控制器,用于接收来自客户端的请求并处理它们。而 @RestController 注解是一个组合注解,相当于 @Controller 和 @ResponseBody 注解的结合。使用 @RestController 注解的类可以直接返回 JSON 数据或 XML 等数据格式。
@RequestMapping
@RequestMapping 注解是用来映射 HTTP 请求的。可以将它用在类和方法上,表示类或方法处理指定的请求路径和 HTTP 请求方法。例如,@RequestMapping("/user") 可以用来处理 /user 路径的请求,@RequestMapping(value = "/user", method = RequestMethod.POST) 可以用来处理 POST 方法的 /user 路径的请求。
@Autowired
@Autowired 注解是 Spring 框架中的依赖注入注解。它可以用来自动装配 Spring 容器中的 Bean 对象。使用 @Autowired 注解可以避免手动编写代码来获取 Bean 对象的实例。
@Component
@Component 是一个通用的注解,用于标识一个类为 Spring 的 Bean 对象。使用 @Component 注解标记的类会被 Spring 自动扫描,并将其实例化成 Bean 对象放入 Spring 容器中。
@Service
@Service 注解用于标识一个类为业务层的 Bean 对象。与 @Component 注解类似,使用 @Service 注解标记的类会被 Spring 自动扫描并实例化成 Bean 对象放入 Spring 容器中。
@Repository
@Repository 注解用于标识一个类为数据访问层的 Bean 对象。使用 @Repository 注解标记的类会被 Spring 自动扫描并实例化成 Bean 对象放入 Spring 容器中。
@Transactional
@Transactional 注解用于标识一个方法或类需要事务支持。使用 @Transactional 注解可以让 Spring 自动管理事务的提交和回滚。
@Configuration 和 @Bean
@Configuration 注解用于标识一个类为 Spring 配置类。使用 @Configuration 注解标记的类可以包含一个或多个方法,这些方法会返回 Bean 对象,并将其放入 Spring 容器中。使用 @Bean 注解标记的方法可以用来创建一个 Bean 对象,并将其放入 Spring 容器中。
springbean的作用域
singleton(单例作用域)
这是Spring的默认作用域,表示在整个Spring IoC容器中只有一个Bean的实例。所有对该Bean的引用都指向同一个对象,通常用于无状态的Bean,即不需要修改其属性的Bean。
prototype(原型作用域)
表示每次获取或注入Bean时都会创建一个新的实例。这种作用域适用于有状态的Bean,因为每次操作都可能涉及到不同的状态。
request(请求作用域)
在每次HTTP请求时创建一个新的Bean实例,该实例仅在当前请求的生命周期内有效。适用于需要在每次请求中保持特定状态的情况。
session(回话作用域)
在一个HTTP Session中定义一个Bean实例,该实例在用户会话期间共享。适用于需要在用户会话期间保持某些状态的情况。
application(全局作用域)
限定一个Bean的作用域为ServletContext的生命周期。该作用域仅适用于web的Spring WebApplicationContext环境。
springbean的生命周期
- 根据配置情况调用 Bean 构造方法或工厂方法实例化 Bean。
- 利用依赖注入完成 Bean 中所有属性值的配置注入。
- 如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值。
- 如果 Bean 实现了 BeanFactoryAware 接口,则 Spring 调用 setBeanFactory() 方法传入当前工厂实例的引用。
- 当一个 Bean 实现了 ApplicationContextAware 接口并在 Spring 容器中被实例化时,Spring 容器会自动调用该 Bean 的 setApplicationContext 方法,并将应用程序上下文ApplicationContext作为参数传递进来
- BeanPostProcessor是Spring框架中的一个重要接口,它允许开发者在Spring容器创建和初始化bean的过程中,对bean进行自定义处理。这包括在bean实例化之后、属性设置之前(postProcessBeforeInitialization方法),以及在bean初始化之后(postProcessAfterInitialization方法)执行自定义逻辑(Spring容器在创建和初始化每一个bean时,都会调用CustomBeanPostProcessor中的这两个方法,允许你进行自定义处理)
- InitializingBean 是 Spring 框架中的一个接口,它定义了一个 afterPropertiesSet 方法。当 Spring 容器创建 bean 的所有属性都被设置完成后,会调用这个方法。
- 如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。
- 如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的初始化方法 postProcessAfterInitialization()。此时,Bean 已经可以被应用系统使用了。
- 如果在 <bean> 中指定了该 Bean 的作用范围为 scope="singleton",则将该 Bean 放入 Spring IoC 的缓存池中,将触发 Spring 对该 Bean 的生命周期管理;如果在 <bean> 中指定了该 Bean 的作用范围为 scope="prototype",则将该 Bean 交给调用者,调用者管理该 Bean 的生命周期,Spring 不再管理该 Bean。
- 如果 Bean 实现了 DisposableBean 接口,则 Spring 会调用 destory() 方法将 Spring 中的 Bean 销毁;如果在配置文件中通过 destory-method 属性指定了 Bean 的销毁方法,则 Spring 将调用该方法对 Bean 进行销毁。