Spring02
1.Spring简介
Spring 是一个生态圈Spring 是一个开源的Java 企业级应用框架,提供了广泛的功能和特性,用于开发和管理Java 应用程序。它的核心原则是基于IOC (Inversion of Control ,控制反转)和AOP (Aspect - Oriented Programming ,面向切面编程)。Spring 框架的主要特点包括:
1. IOC 容器:Spring 的IOC 容器负责管理应用程序中的对象实例的生命周期和依赖关系。开发者通过配置文件或注解来声明对象的依赖关系,容器则负责自动装配并提供对象的实例。这种松耦合的方式使得应用程序更加灵活、可测试和可维护。
2. AOP 支持:Spring 通过AOP 可以实现横切关注点的模块化,例如事务管理、日志记录等。开发者可以通过声明方式或编程方式将这些关注点应用到目标对象的方法上,而无需修改目标对象的代码。
3. 数据访问支持:Spring 提供了多个模块,用于简化数据访问层的开发,包括对JDBC 、ORM (如Hibernate )和NoSQL 数据库的支持。通过这些模块,开发者可以更方便地进行数据库的操作。
4. Web 开发支持:Spring 提供了用于开发Web 应用程序的模块,包括Spring MVC 和Spring WebFlux 。它们简化了处理HTTP 请求、管理会话和处理表单验证等任务。
5. 综合性的解决方案:Spring 框架还包括许多其他模块,用于解决领域特定的问题,如安全性、缓存、消息队列等。这些模块可以根据需求选择使用,提供了一种综合性的解决方案。总之,Spring 框架是一个强大而灵活的Java 开源框架,它通过IOC 和AOP 等特性,提供了一种基于配置和注解的编程模型,简化了企业级应用程序的开发和管理。
根据图片信息,可以将Spring 框架的组件分为几个部分,并进行解释:Spring 框架运行时(Spring Framework Runtime ):这是整个Spring 框架的基础,它提供了核心的功能和基础结构,使得其他组件能够协同工作。它负责创建、配置和管理应用程序对象,以及控制应用程序的生命周期。数据访问和集成(Data Access / Integration ):这一部分包括了所有与数据访问和集成相关的功能。Spring 框架提供了多种数据访问方式,如JDBC 、Hibernate 、JPA 等,还支持与各种数据源进行集成。此外,Spring 还提供了多种消息传递方式,如RMI 、JMS 、Email 等,可以方便地实现应用程序之间的通信。Web (Web ):这一部分主要涉及基于Web 的应用程序开发。Spring 框架提供了Spring MVC 框架,用于构建基于Web 的Java 应用程序。Spring MVC 框架将应用程序分为模型(Model )、视图(View )和控制器(Controller )三个部分,并提供了多种用于处理HTTP 请求和响应的功能。消息传递(Messaging ):Spring 框架支持多种消息传递方式,如JMS 、AMQP 、SMTP 等。通过使用消息代理(Message Broker ),应用程序可以发送和接收消息,实现分布式系统之间的异步通信和数据交换。Core Container (核心容器)是Spring 框架的基础,它提供了Spring 框架运行时所需的基本功能和基础结构,使得其他组件能够协同工作。Core Container 包括Spring 框架的核心功能,如IoC (控制反转)容器、Bean 管理、依赖注入等。这些功能使得开发人员能够更轻松地管理和组织应用程序中的对象及其依赖关系,从而使得应用程序更易于维护和扩展。测试(Test ):这一部分涉及应用程序的测试。Spring 框架提供了多种测试工具和技术,如JUnit 、Mockito 、PowerMock 等,可以用于编写单元测试和集成测试。此外,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> @Testpublic 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属性
<bean id="p1" class="com.aaa.test.People"></bean>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的时候 都创建一个新的对象此时可以设定 scope1. 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 实例