spring是一个轻量级框架,为简化开发,它封装了一系列开箱即用的组件功能模块,可以接管web层,dao层等。核心是IOC容器和AOP面向切面编程。
springmvc是用于开发springweb项目的mvc技术框架实现,是struts2+spring的整合,代替了servlet的处理响应请求,表单校验等作用。
springmvc原理图
spring boot是一个微服务框架,提供starters poms简化maven配置,继承了IOC AOP思想,可以说是spring的扩展,使开发、测试、部署更加灵活。
综上所述,三者间关系可以描述为:
springmvc 属于 spring,spring boot 是spring的扩展。
ioc 控制反转,spring的核心,用来管理和控制对象的生命周期以及对象与对象之间的关系,通过配置文件注入很好地实现了对象与对象之间的解耦。ioc的一个重点是通过反射,在系统运行过程中,动态地向一个对象提供它所需的其他对象。
spring通过一个配置文件描述bean和bean之间的关系,利用java反射功能实例化bean并建立bean之间的依赖关系。ioc容器在完成这些底层基础功能上,还提供了bean实例缓存,生命周期管理。
ioc工作原理:
(传统xml配置) ioc实现了工厂模式,通过读取application配置文件中bean标签下的类,注入到ioc容器中,通过构造器或者set方法,产生beanfactory,beanfactory通过getbean来获取对象。
(基于Java代码配置)通过注解@Configuration配置spring容器应用上下文,并启动spring,通过 @Bean注册bean对象。
@Configuration与@Bean一般配合使用,作用主要用于在 Java 代码中实现 Spring 的配置,它的目的是代替Spring的xml配置文件。https://www.cnblogs.com/tanghaorong/p/14163577.htmlhttps://www.cnblogs.com/tanghaorong/p/14163577.html
--传统xml配置
--基于java代码配置
@Configuration
public class BeanConfig {
@Bean
public Person person() {
return new Person();
}
}
/**
* 用户实体类 用@Component注解将User类标注为一Bean
*/
@Component
public class Person {
@Value(value = "2025")
private Integer perId;
@Value(value = "uu")
private String perName;
@Value(value = "29")
private Integer perAge;
}
package com.thr.spring.config;
import com.pojo.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
//bean名称为方法默认值:per1
@Bean
public Person per1() {
return new Person();
}
//bean名称通过value指定了:per2Bean
@Bean("per2Bean")
public Person per2() {
return new Person();
}
}
/**
* Spring测试代码
*/
public class SpringRunTest {
public static void main(String[] args) {
//1.初始化Spring容器,通过注解加载
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
//2.通过容器获取实例
User per1 = applicationContext.getBean("per1", Person.class);
User per2Bean = applicationContext.getBean("per2Bean", Person.class);
//3.调用实例中的属性
System.out.println("per1 = " + per1);
System.out.println("per2Bean = " + per2Bean);
}
}
bean的scope作用域:
singleton(默认):单例,对于同一个类,多次通过getbean获该类的对象,都是同一个实例。
prototype:原型,对于同一个类,多次通过getbean获取的都是一个新的实例。
以下,只在 Web 感知的 Spring ApplicationContext
的上下文中有效。ApplicationContext
面向使用 Spring 框架的开发者,几乎所有的应用场合我们都直接使用 ApplicationContext
而非底层的 BeanFactory。
request:每一个http request都会创建一个新实例,该bean只在当前请求内有效。相当于servlet中的request。
session:每一个http session都会创建一个新实例,该bean只在当前会话内有效。相当于servlet中的session。
global session:每一个全局http session,application,都会创建一个新实例。相当于servlet中的application。
https://www.cnblogs.com/hjwublog/p/10332042.html
Spring之IOC原理及代码详解 - kosamino - 博客园