初识Spring

 1.Spring是什么?

   一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。

   核心是控制反转(IoC——Inversion of Control)和面向切面编程(AOP——Aspect Orient Programming

    一个分层的 Java SE/EE full-stack(一站式)轻量级开源框架。

2.为什么开发要使用spring框架,它解决了什么问题?

    降低代码间的耦合度。——解耦

3.两个问题

   第一,业务耦合?

    先分析一下主业务逻辑和系统级业务逻辑的区别。主业务系统逻辑,代码之间有着较强的逻辑练习,复用性很小。

    系统级业务逻辑主要是为系统提供各种服务的,例如JDBC连接数据库,日志,安全,事务等复用性很强。

    对于程序员来说,事不过三,三则重构,你复用性这么强,肯定将你抽离出来进行封装。这样才能符合我们面向对象编程的特性。

 比如有一项订单业务,查询当日订单量,我们以JDBC连接数据库为例。

 ①注册驱动

 ②获取数据库连接对象

 ③写sql语句——这就是我们的主业务逻辑,它只有这一个功能,单纯的去查询当日订单量,有具体的专业业务场景。

 ④获取执行SQL对象的statement

 ⑤执行SQL语句

 ⑥处理结果

 ⑦释放资源

但是①②④⑤⑥⑦这些步骤在其它业务场景中也需要,复用性很强,每一个业务都需要进行数据库连接等操作。我们把它们统称为系统级业务逻辑。如果将系统级业务从主业务逻辑中抽离出来,进行复用,这样业务逻辑将变得简单纯净。同样的每个业务都需要进行日志,安全,事务等系统级的业务服务,这些业务如果依旧写在每一个业务逻辑当中,就会造成业务逻辑繁琐复杂。AOP 就是这些问题的解决方案, 它把这些系统级别的业务服务剥离出来形成一个切面,以期复用,然后将切面动态的织入到业务逻辑中,让业务逻辑能够享受到此切面的服务。

   第二,类与类之间耦合

   想想我们的三层架构,controller 层依赖于service 层 , service层依赖于dao层。controller层需要service层对象(这里的对象可以看做成一种资源),①先导入service层,②声明变量,创建service层对象。这样类与类之间是不是存在一种关联关系。

4.Spring是如何解耦的呢?IoC与AOP

Spring 核心:IoC 与 AOP

IoC是一种思想 ,它使得主业务在相互调用过程中,不用再自己维护关系了,即不在是自己创建要使用的对象了,而是将创建对象的主动权交给Spring容器,将对象的控制权交给Spring容器,由 Spring 容器统一管理,来实现对象的装配和管理,自动注入

 IOC实现方式主要有两种,

依赖查找(Dependency Lookup,DL):容器提供回调接口和上下文环境给组件,程序代码则需要提供具体的查找方式。比较典型的是依赖于 JNDI 系统的查找。(了解,已经不再使用)

依赖注入(Dependency InjectionDI):指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

     AOP 是一种编程思想,是面向对象编程 OOP 的补充。它使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务混杂到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。

5.扩展:Spring容器

   我们说容器为各个类创造所需要的资源,它通过配置文件的方式来定义对象,负责管理对象的生命周期,用来维护各个对象之间的依赖关系。

 6.spring体系结构

    Spring 20 多个模块组成,它们可以分为数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP, Aspects)、应用服务器设备管理(Instrumentation)、消息发送(Messaging)、核心容器(Core Container)和测试(Test

 

7.创建一个Spring应用程序

目录结构如下

pom.xml文件,添加org.springframework:spring-context 依赖

依赖关系如下:所有的模块都依赖commons-logging

service层写一个say()方法

 src/main/resources 下创建 spring-context.xml 配置文件,对象的创建工作交给 Spring 容器管理(IoC

  • <bean />:用于定义一个实例对象。一个实例对应一个 bean 元素。
  • id:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 BeanBean Bean 间的依赖关系也是通过 id 属性关联的。
  • class:指定该 Bean 所属的类,注意这里只能是类,不能是接口。

编写一个MyTest类

运行结果

<think>好的,我现在需要帮助用户了解Java EE环境下Spring的基本概念和入门知识。首先,用户明确提到了“Java EE Spring 入门教程 基本概念”,所以我的回答需要涵盖Spring的核心概念,并结合Java EE的环境。根据用户提供的引用内容,我需要整合这些信息,确保引用的正确使用。 首先,用户提供的引用中有关于Spring框架的优点、入门程序、配置文件以及控制反转的内容。我需要将这些内容组织成一个结构清晰的回答,分点解释基本概念,并可能包含一个简单的入门示例。同时,根据系统级指令,必须使用中文,正确使用LaTeX格式的数学公式(虽然这里可能不涉及数学公式,但要注意其他格式要求),并在引用处添加标识。 接下来,我需要确定回答的结构。通常,入门教程的结构可能包括框架简介、核心概念、优点、入门步骤、示例代码以及常见问题。用户的问题集中在基本概念和入门知识,所以应该重点放在Spring的核心概念,比如IoC(控制反转)、DI(依赖注入)、Spring容器、配置文件等。同时,结合用户提供的引用中的代码示例,比如TestHelloSpring类和applicationContext.xml配置,可以展示一个简单的Spring应用创建过程。 另外,需要确保引用的正确引用。例如,引用[2]提到了Spring的优点,引用[3]和[5]提供了入门程序的代码示例,引用[4]涉及配置文件的结构。在回答中,当提到这些内容时,需要自然地添加引用标识,比如在解释控制反转时引用[5],在示例代码处引用[3]和[4]。 需要注意用户可能对Spring在Java EE中的作用不太清楚,需要简要说明Spring如何融入Java EE环境,比如简化企业级应用开发,整合其他Java EE技术等。同时,要避免过于深入的技术细节,保持入门级别的解释。 最后,生成的相关问题需要围绕Spring的基本概念和进一步学习的方向,比如IoC与DI的区别、Bean的作用域、Spring与其他框架的整合等。这些问题应帮助用户深化理解或进行下一步的学习。 现在,需要检查是否符合所有系统指令:使用中文、正确引用、LaTeX格式(虽然可能不涉及数学内容,但代码块需正确)、结构清晰、生成相关问题。同时确保引用标识正确,比如[^2]、[^3]等放置在对应的解释部分末尾。</think>### Java EE环境下Spring框架基本概念与入门指南 #### 一、Spring框架的核心概念 1. **控制反转(IoC)** Spring通过IoC容器管理对象的生命周期和依赖关系。开发者不再手动创建对象,而是由容器完成对象的创建和依赖注入。例如,通过XML配置文件定义Bean后,可直接从容器中获取实例[^5]。 数学示例:若对象依赖关系可表示为$A \rightarrow B \rightarrow C$,IoC容器会自动完成依赖链的构建。 2. **依赖注入(DI)** 是IoC的具体实现方式,通过构造函数、Setter方法或注解将依赖对象注入目标对象。例如: ```xml <bean id="userDao" class="com.example.UserDaoImpl"/> <bean id="userService" class="com.example.UserService"> <property name="userDao" ref="userDao"/> <!-- 注入依赖 --> </bean> ``` 此处`userService`的`userDao`属性由容器自动注入[^4]。 3. **Spring容器** 核心接口为`ApplicationContext`,负责加载配置文件并管理Bean。常用实现类包括: - `ClassPathXmlApplicationContext`:从类路径加载XML配置 - `FileSystemXmlApplicationContext`:从文件系统加载配置 #### 二、Spring框架的优势 1. **解耦与模块化** 通过DI降低组件间耦合度,提升代码复用性。 2. **整合企业级服务** 支持事务管理、安全框架等Java EE服务集成。 3. **声明式编程** 通过AOP实现日志、事务等横切关注点的声明式管理。 #### 三、入门实践:HelloSpring示例 1. **配置XML文件** ```xml <?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"> <bean id="helloSpring" class="com.example.HelloSpring"/> </beans> ``` 此配置定义了一个名为`helloSpring`的Bean。 2. **Java测试类** ```java public class TestHelloSpring { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); HelloSpring hello = (HelloSpring) context.getBean("helloSpring"); hello.show(); // 输出: "Hello Spring!" } } ``` 此处通过容器获取Bean实例并调用方法[^3]。 #### 四、Spring在Java EE中的角色 Spring通过整合JDBC、JPA、消息队列等模块,简化企业级应用开发。例如: - 使用`Spring MVC`构建Web层 - 通过`Spring Data`简化数据库操作 - 利用`Spring Security`实现权限控制
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值