Spring -- IOC

一、spring springmvc springboot关系

spring是一个轻量级框架,为简化开发,它封装了一系列开箱即用的组件功能模块,可以接管web层,dao层等。核心是IOC容器和AOP面向切面编程。

springmvc是用于开发springweb项目的mvc技术框架实现,是struts2+spring的整合,代替了servlet的处理响应请求,表单校验等作用。

Spring -- IOC_第1张图片

springmvc原理图

spring boot是一个微服务框架,提供starters poms简化maven配置,继承了IOC AOP思想,可以说是spring的扩展,使开发、测试、部署更加灵活。

综上所述,三者间关系可以描述为:

springmvc 属于 spring,spring boot 是spring的扩展。


二、spring核心 ioc容器

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 - 博客园

你可能感兴趣的:(Java,Spring,java,spring,ioc容器)