初识spring

本文介绍了Spring框架的基础概念,包括其起源、核心功能与优势,并详细讲解了如何使用Spring进行开发,从创建项目到配置文件的设置,再到依赖注入等多种实践技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是spring


Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE

Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。

EE开发分成三层结构:

* WEB层:Spring MVC.

*业务层:Bean管理:(IOC)

*持久层:Spring的JDBC模板.ORM模板用于整合其他的持久层框架.

Expert One-to-One J2EE Design andDevelopment:J2EE的设计和开发:(2002.EJB)

Expert One-to-One J2EE Development withoutEJB:J2EE不使用EJB的开发.

2.学习Spring的优势

方便解耦,简化开发

Spring  就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理

AOP编程的支持

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控的功能

声明式事物的支持

只需要通过配置就可以完成对事物的管理,而无需手动编程。

方便程序的测试

Spring对Junit4支持,可以通过注解方便的测试Spring程序

方便集成各种优秀的框架

Spring不排斥各种优秀的开源框架,其内部提供了各种优秀框架(struts2、Hibernate)的直接支持

降低JavaEE API的使用难度

Spring对javaee开发中非常难用的一些API,都提供可封装。是用难度降低。


IOC:Inversion of

Control控制反转.指的是对象的创建权反转(交给)给Spring.

作用是实现了程序的解耦合.

3.使用Spring

3.1下载Spring开发包

http://spring.io/

3.2创建WEB项目,导包


lQ

1.1.1.1步骤三:引入相关配置文件:

log4j.properties

applicationContext.xml

引入约束:

spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

1.1.1.2步骤四:编写相关的类:

publicinterfaceUserDao {

publicvoidsayHello();

}

publicclassUserDaoImplimplementsUserDao {

@Override

publicvoidsayHello() {

System.out.println("Hello

Spring...");

}

}

1.1.1.3步骤五:完成配置:


"userDao"class="cn.itcast.spring.demo1.UserDaoImpl">

1.1.1.4步骤六:编写测试程序:

@Test

// Spring的方式:

publicvoiddemo2(){

//创建Spring的工厂类:

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext.xml");

//通过工厂解析XML获取Bean的实例.

UserDaouserDao= (UserDao)applicationContext.getBean("userDao");

userDao.sayHello();

}

1.1.1.5IOC和DI:

IOC:控制反转,将对象的创建权交给了Spring.

DI:DependencyInjection依赖注入.需要有IOC的环境,Spring创建这个类的过程中,Spring将类的依赖的属性设置进去.

1.1.2Spring中的工厂:

1.1.2.1ApplicationContext:

ApplicatioContext接口有两个实现类:

ClassPathXmlApplicationContext:加载类路径下Spring的配置文件.

FileSystemXmlApplicationContext:加载本地磁盘下Spring的配置文件.

1.1.2.2BeanFactory:

1.1.2.3BeanFactory和ApplicationContext的区别:

BeanFactory:是在getBean的时候才会生成类的实例.

ApplicationContext:在加载applicationContext.xml时候就会创建.

1.1.3配置STS的XML的提示:

1.1.3.1Spring配置文件中提示的配置

复制路径:

*http://www.springframework.org/schema/beans/spring-beans.xsd

查找XML Catalog:

点击Add..

1.1.4Spring的相关配置:

1.1.4.1id属性和name属性标签的配置

id:Bean起个名字.在约束中采用ID的约束:唯一.必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号id:不能出现特殊字符.

name:Bean起个名字.没有采用ID的约束.name:出现特殊字符.如果没有id的话, name可以当做id使用.

*整合struts1的时候:

1.1.4.2scope属性:Bean的作用范围.

* singleton:默认值,单例的.

* prototype:多例的.

* request:WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.

* session:WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.

* globalSession:WEB项目中,应用在Porlet环境.如果没有Porlet环境那么globalSession相当于session.

1.1.4.3Bean的生命周期的配置:

通过配置标签上的init-method作为Bean的初始化的时候执行的方法,配置destroy-method作为Bean的销毁的时候执行的方法。

销毁方法想要执行,需要是单例创建的Bean而且在工厂关闭的时候,Bean才会被销毁.

1.1.5Spring的Bean的管理XML的方式:

1.1.5.1Spring的Bean的属性注入:

【构造方法的方式注入属性】


"car"class="cn.itcast.spring.demo4.Car">

undefined"name"value="保时捷"/>undefined

undefined"price"value="1000000"/>undefined

【set方法的方式注入属性】


"car2"class="cn.itcast.spring.demo4.Car2">

"name"value="奇瑞QQ"/>

"price"value="40000"/>

1.1.5.2Spring的属性注入:对象类型的注入:


"person"class="cn.itcast.spring.demo4.Person">

"name"value="会希"/>


"car2"ref="car2"/>

1.1.5.3名称空间p的属性注入的方式:Spring2.x版本后提供的方式.

第一步:引入p名称空间

xmlns:p="http://www.springframework.org/schema/p"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

第二步:使用p名称空间.

*普通属性:p:属性名称=””

*对象类型属性:p:属性名称-ref=””


p:price="1200000"/>

1.1.5.4SpEL的方式的属性注入:Spring3.x版本后提供的方式.

SpEL:Spring Expression Language.

语法:#{ SpEL }


"car2"class="cn.itcast.spring.demo4.Car2">

"name"value="#{'奔驰'}"/>

"price"value="#{800000}"/>

引用了另一个类的属性


1.1.5.5注入复杂类型:


"collectionBean"class="cn.itcast.spring.demo5.CollectionBean">


"arrs">

会希

冠希

天一


"list">

芙蓉

如花

凤姐


"map">

"aaa"value="111"/>

"bbb"value="222"/>

"ccc"value="333"/>


"properties">

"username">root

"password">123

1.1.5.6Spring的分配置文件的开发

一种:创建工厂的时候加载多个配置文件:

ApplicationContext applicationContext = newClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");

二种:在一个配置文件中包含另一个配置文件:

1.2案例代码

1.2.1搭建环境:

1.2.1.1创建web项目,引入jar包.

WEB层使用Struts2:

* Struts2开发的基本的包

Spring进行Bean管理:

*Spring开发的基本的包

1.2.1.2引入配置文件:

Struts2:

*web.xml

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

*struts.xml

Spring:

*applicationContext.xml

*log4j.properties

1.2.1.3引入页面:

1.2.1.4创建包结构和类:

1.2.1.5在添加页面提交内容到Action:

1.2.1.6改写Action类并配置Action:

"crm"extends="struts-default"namespace="/">

"customer_*"class="cn.itcast.crm.web.action.CustomerAction"method="{1}">

1.2.1.7在Action调用业务层:

将业务层类配置到Spring中:

在Action中获取业务层类:

publicString save(){

System.out.println("Action中的save方法执行了...");

System.out.println(customer);

//传统方式:

/*CustomerService customerService = new CustomerServiceImpl();

customerService.save(customer);*/

// Spring的方式进行操作:

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext.xml");

CustomerServicecustomerService= (CustomerService)applicationContext.getBean("customerService");

customerService.save(customer);

returnNONE;

}

****每次请求都会创建一个工厂类,服务器端的资源就浪费了,一般情况下一个工程只有一个Spring的工厂类就OK了.

*将工厂在服务器启动的时候创建好,将这个工厂放入到ServletContext域中.每次获取工厂从ServletContext域中进行获取.

*ServletContextLinstener:监听ServletContext对象的创建和销毁.

1.2.2Spring整合WEB项目

1.2.2.1引入spring-web.jar包:

配置监听器:

org.springframework.web.context.ContextLoaderListener

contextConfigLocation

classpath:applicationContext.xml

1.2.2.2改写Action:

/**

*保存客户的执行的方法:save

*/

publicString save(){

//传统方式:

/*CustomerService

customerService = new CustomerServiceImpl();

customerService.save(customer);*/

// Spring的方式进行操作:

/*ApplicationContext

applicationContext = new

ClassPathXmlApplicationContext("applicationContext.xml");

CustomerService customerService = (CustomerService)

applicationContext.getBean("customerService");*/

WebApplicationContextapplicationContext=WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext());

CustomerServicecustomerService= (CustomerService)applicationContext.getBean("customerService");

System.out.println("Action中的save方法执行了...");

System.out.println(customer);

customerService.save(customer);

returnNONE;

}

1.2.2.3编写Dao并配置:

1.2.2.4业务层调用DAO:

publicclassCustomerServiceImplimplementsCustomerService {

privateCustomerDaocustomerDao;

publicvoidsetCustomerDao(CustomerDaocustomerDao) {

this.customerDao=customerDao;

}

}

标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
内容概要:本文详细介绍了一个基于灰狼优化算法(GWO)优化的卷积双向长短期记忆神经网络(CNN-BiLSTM)融合注意力机制的多变量多步时间序列预测项目。该项目旨在解决传统时序预测方法难以捕捉非线性、复杂时序依赖关系的问题,通过融合CNN的空间特征提取、BiLSTM的时序建模能力及注意力机制的动态权重调节能力,实现对多变量多步时间序列的精准预测。项目不仅涵盖了数据预处理、模型构建与训练、性能评估,还包括了GUI界面的设计与实现。此外,文章还讨论了模型的部署、应用领域及其未来改进方向。 适合人群:具备一定编程基础,特别是对深度学习、时间序列预测及优化算法有一定了解的研发人员和数据科学家。 使用场景及目标:①用于智能电网负荷预测、金融市场多资产价格预测、环境气象多参数预报、智能制造设备状态监测与预测维护、交通流量预测与智慧交通管理、医疗健康多指标预测等领域;②提升多变量多步时间序列预测精度,优化资源调度和风险管控;③实现自动化超参数优化,降低人工调参成本,提高模型训练效率;④增强模型对复杂时序数据特征的学习能力,促进智能决策支持应用。 阅读建议:此资源不仅提供了详细的代码实现和模型架构解析,还深入探讨了模型优化和实际应用中的挑战与解决方案。因此,在学习过程中,建议结合理论与实践,逐步理解各个模块的功能和实现细节,并尝试在自己的项目中应用这些技术和方法。同时,注意数据预处理的重要性,合理设置模型参数与网络结构,控制多步预测误差传播,防范过拟合,规划计算资源与训练时间,关注模型的可解释性和透明度,以及持续更新与迭代模型,以适应数据分布的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值