Spring02

Spring02

1.Spring简介

Spring 是一个生态圈

    Spring是一个开源的Java企业级应用框架,提供了广泛的功能和特性,用于开发和管理Java应用程序。它的核心原则是基于IOCInversion of Control,控制反转)和AOPAspect-Oriented Programming,面向切面编程)。

Spring框架的主要特点包括:
1. IOC容器:SpringIOC容器负责管理应用程序中的对象实例的生命周期和依赖关系。开发者通过配置文件或注解来声明对象的依赖关系,容器则负责自动装配并提供对象的实例。这种松耦合的方式使得应用程序更加灵活、可测试和可维护。
2. AOP支持:Spring通过AOP可以实现横切关注点的模块化,例如事务管理、日志记录等。开发者可以通过声明方式或编程方式将这些关注点应用到目标对象的方法上,而无需修改目标对象的代码。
3. 数据访问支持:Spring提供了多个模块,用于简化数据访问层的开发,包括对JDBCORM(如Hibernate)和NoSQL数据库的支持。通过这些模块,开发者可以更方便地进行数据库的操作。
4. Web开发支持:Spring提供了用于开发Web应用程序的模块,包括Spring MVCSpring WebFlux。它们简化了处理HTTP请求、管理会话和处理表单验证等任务。
5. 综合性的解决方案:Spring框架还包括许多其他模块,用于解决领域特定的问题,如安全性、缓存、消息队列等。这些模块可以根据需求选择使用,提供了一种综合性的解决方案。

总之,Spring框架是一个强大而灵活的Java开源框架,它通过IOCAOP等特性,提供了一种基于配置和注解的编程模型,简化了企业级应用程序的开发和管理。

Spring02_第1张图片

根据图片信息,可以将Spring框架的组件分为几个部分,并进行解释:

Spring框架运行时(Spring Framework Runtime):这是整个Spring框架的基础,它提供了核心的功能和基础结构,使得其他组件能够协同工作。它负责创建、配置和管理应用程序对象,以及控制应用程序的生命周期。
    
数据访问和集成(Data Access/Integration):这一部分包括了所有与数据访问和集成相关的功能。Spring框架提供了多种数据访问方式,如JDBCHibernateJPA等,还支持与各种数据源进行集成。此外,Spring还提供了多种消息传递方式,如RMIJMSEmail等,可以方便地实现应用程序之间的通信。
    
WebWeb):这一部分主要涉及基于Web的应用程序开发。Spring框架提供了Spring MVC框架,用于构建基于WebJava应用程序。Spring MVC框架将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分,并提供了多种用于处理HTTP请求和响应的功能。
    
消息传递(Messaging):Spring框架支持多种消息传递方式,如JMSAMQPSMTP等。通过使用消息代理(Message Broker),应用程序可以发送和接收消息,实现分布式系统之间的异步通信和数据交换。
    
Core Container(核心容器)是Spring框架的基础,它提供了Spring框架运行时所需的基本功能和基础结构,使得其他组件能够协同工作。Core Container包括Spring框架的核心功能,如IoC(控制反转)容器、Bean管理、依赖注入等。这些功能使得开发人员能够更轻松地管理和组织应用程序中的对象及其依赖关系,从而使得应用程序更易于维护和扩展。
    
测试(Test):这一部分涉及应用程序的测试。Spring框架提供了多种测试工具和技术,如JUnitMockitoPowerMock等,可以用于编写单元测试和集成测试。此外,Spring还提供了Spring Test框架,用于对Spring应用程序进行集成测试。
    
总之,Spring框架的体系结构提供了灵活性和可扩展性,使得开发人员能够创建具有高度可重用性和可维护性的应用程序。通过使用Spring框架的组件,可以实现应用程序的不同部分之间的松耦合和协同工作。

2.创建Spring项目

A pom文件添加依赖
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>6.0.7</version>
    </dependency>
    
B 创建resources文件夹 将其 mark as resource root  添加配置文件
    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

3.Beanfactory获取bean对象(已废弃)

A 在配置文件中配置需要让spring管理的对象有哪些
    <bean id="people" class="com.aaa.test.People"></bean>

B 通过spring的 BeanFactory获取对象 (控制反转IOC

4.ApplicationContext对象

	@Test
    public void test02(){
        //反转获取对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

        People p1 = context.getBean("p1", People.class);
        p1.eat();
    }

5.Spring配置文件详解

5.1id、name、alias标签

    <bean id="p1" class="com.aaa.test.People">bean>

    @Test
    public void test02(){
        //反转获取对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

        People p1 = context.getBean("p1", People.class);
        p1.eat();
    }

	通过bean工厂去获取bean时 可以通过id去获取 id在配置中不能重复
    我们在配置bean的时候 可以给我们的bean起绰号
    <alias name="p1" alias="hahaha">alias>
    People p1 = context.getBean("hahaha", People.class);

5.2class属性



class 配置的Spring核心容器需要管理的类 写的是类的全限定名

底层是根据全限定名 通过反射Class.forName( 全限定名 ).newInstance(); 创建bean对象

6.lazy-init懒加载

   此时 我们创建一个类
      并且给这个类的空参构造中  加入一条输出语句
   使用spring管理这个类
      此时我们创建两个不同的容器类
   当我们创建ApplicationContext对象时,发现有输出语句,说明ApplicationContext被创建时,就会立刻将自己需要管理的bean(类)进行对象的创建  ---- 饿汉模式
       
   使用Beanfactory时,创建Beanfactory对象时,管理的类的对象不会被创建而是在getBean的时候才去创建 ----懒汉模式
   
   此时我们想让 ApplicationContext 不要太着急 让它也在getBean时 再去创建对象
       此时 我们只需要给 bean设置 lazy-init就可以了
   也可以在beans标签中添加默认懒加载
       default-lazy-init="true"
       
       

7.scope作用域

当我们调用 getBean多次获取同一个对象的时候 发现构造函数只被调用了一次
    
   说明getBean多次调用 获取的都是同一个对象
    Spring 对bean的创建 默认只创建一次 
    
    
    我们希望每次 getBean的时候 都创建一个新的对象
    此时可以设定 scope
    
    
1.singleton 使用该属性定义Bean时,IO容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。
    
2.prototype 使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。
    
3.reguest该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于 webAppTicationContext环境。
    
4.session该属性仅用于HTTP Session,同一个session共享一个Bean实例。不同Session使用不同的实例。适用于 webAppTicationContext环境.
    
5.global-session 该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例

你可能感兴趣的:(Java学习,java,spring)