Spring 框架学习

Spring6.0 框架学习 Spring 框架是 Java 生态中最主流的企业级应用开发框架,它以 “控制反转(IOC)” 和 “面向切面编程(AOP)” 为核心,提供了一站式的企业级开发解决方案,涵盖依赖管理、事务控制、Web 开发、数据访问等多个领域。生态完善:Spring 生态涵盖 Web(Spring MVC)、微服务(Spring Boot/Spring Cloud)、安全(Spring Security)等全场景。Spring 本身不实现具体业务功能(如数据访问),而是通过集成第三方框架发挥价值。 阅读详情

一、什么Spring

  • 1、 什么是框架
    一组jar包的集合,是一个半成品,只解决某一个领域的问题
  • 2、Spring的含义
    • Spring是一个轻量级的DI/IOC与AOP的容器框架

    • **轻量级:**相对于EJB(以前一个重量级框架)来讲的,框架更加简单,功能也很强大

    • DI:依赖注入(对象自己不创建,依赖于Spring容器,Spring会把对象创建并交给他)

    • IOC:控制反转(对象的控制权反转给Spring),和DI说的是一回事,是一种设计思想。

    • AOP:面向切面编程(可以在代码的任意位置加上你自己的功能)

    • 容器:Spring就是一个Bean工厂(Bean就是对象)

      ◆目的:解决企业应用开发的复杂性
      ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
      ◆范围:任何Java应用

二 、为什么要学习Spring

  • 1、开发应用时遇到的问题:
    • 代码耦合高
 public class EmployeeServiceImpl {
    	private IEmployeeDao employeeDao = new EmployeeDaoImpl();
    	
    }
    问题:若把IEmployeeDao的实现改成:HibernateDaoImpl
    ----->简单工厂设计模式

    • 对象之间依赖关系处理繁琐
public class EmpployeeAction {
    private IEmployeeService   service;
    private IDepartmentService departmentService;
}
-----------------------------------------------------------
public class EmpployeeService{
    private IEmployeeDao   dao;
}

//如果对象有很多,且互相存在依赖关系,并且有的对象需要单例模式,有的则需要多个实例。--->IoC

    • 事务控制繁琐
      -对于事务,可以使用Filter或是Struts2的拦截器实现,但这样有一些不好的地方:
      1,此时事务开在表现层,事务周期太长。
      2,有的action方法没有用到数据库操作,不需要开事务。
      3,不能针对某个具体功方法配置事务是否是只读的,因为有的方法只是查询数据。

解决方案:

  1. 把事务开启在 service 层,是极好的。但是: 每个方法前都要开启事务,每个方法后都要关闭事务。—>代码臃肿,开发效率低下。
  2. 如何降低业务逻辑部分之间耦合度,提高程序的可重用性,同时提高开发的效率!—>AOP
EmployeeService{
    public void save(...){
	      开启事务
      dao.save(...);
             关闭事务
    }
    public void update(...){
	      开启事务
      dao.update(...);
             关闭事务
    }
}

  • Spring框架的包分析:
    spring-framework-3.x.RELEASE:Spring核心组件。
    docs: Spring开发、帮助文档。
    libs: Spring核心组件的。jar包、源代码、文档。
    schema : Spring配置文件的schema约束文件。
    spring-framework-3.x.RELEASE-dependencies:Spring依赖的第三方组件。
    包含了各大开源组织提供的依赖jar。比如apache common下的:dbcp.jar pool.jar logging.jar

  • Spring的优势

    1.低侵入/低耦合(降低组件之间的耦合度,实现软件各层之间的解耦。)
    2.声明式事务管理
    3.方便集成其他框架
    4.降低JavaEE开发难度
    5.Spring框架中包括JavaEE 三层的每一层的解决方案 (一站式 )


  • Spring能帮我们做什么:

  • ①.Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。

  • ②.Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。

  • ③.Spring能非常简单的帮我们管理数据库事务。
    ④.Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。
    ⑤.Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套Spring
    MVC框架,来方便web层搭建。
    ⑥.Spring能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。

    三、Spring 的使用

  • 1.导包
    Spring中的:core(核心),beans(一切都是bean),context(上下文,国际化,邮件发送,…)
    expression(表达式)
    位置:spring-framework-4.1.2.RELEASE\libs

    依赖包:logging(日志包)
    位置:spring-framework-3.2.0.RELEASE-dependencies\org.apache.commons\com.springsource.org.apache.commons.logging\1.1.1

  • 2.写一个简单的Class

  • 3.写配置文件(xml)
    3.1 要求写在classpath的根目录下
    3.1 这个xml我们称之为核心配置文件,名称是可以随便取的,一般建议使用applicationContext.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:这个bean的名称(唯一名称)
    				class:全限定名(它才可能根据反射创建对象)
    		 -->	
    		<bean id="myBean" class="cn.itsource_01_hello.MyBean"></bean>
    
    	</beans>
  • 4.写代码获取bean

①.读取配置文件

Resource resource = new ClassPathResource("applicationContext.xml");

②.创建Bean工厂

BeanFactory factory = new XmlBeanFactory(resource);

③.通过Bean获取bean对象

MyBean bean = (MyBean)factory.getBean("myBean");
  • .BeanFactory获取bean的三种方式
  • 1 根据id获取 -> 需要强转
MyBean myBean = *(MyBean)beanFactory.getBean("myBean");

2 根据类型获取 -> 多个相同类型会报错

MyBean myBean = beanFactory.getBean(MyBean.class);

3 根据id与类型获取

MyBean myBean = beanFactory.getBean("myBean",MyBean.class);
  • ApplicationContext:迫切加载方案
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		MyBean bean = (MyBean)context.getBean("MyBean");
  • ApplicationContext与BeanFactory的区别(面试题)

    1、ApplicationContext继承自BeanFactory,但是它更加高级,功能更加强大(i18n,资源文件,…)
    2、ApplicationContext默认是迫切加载,BeanFactory默认懒加载
    3、ApplicationContext想懒加载 <beans … default-lazy-init=“true”

  • bean的作用域
    1.singleton
    2.prototype
    3.request
    4.session
    5.globalSession

  • singleton: 单例 ,在Spring IoC容器中仅存在一个Bean实例 (默认的scope)

  • prototype: 多例 ,每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时 ,相当于执行new XxxBean():不会在容器启动时创建对象

  • request: 用于web开发,将Bean放入request范围,request.setAttribute(“xxx”) , 在同一个request 获得同一个Bean

  • session: 用于web开发,将Bean 放入Session范围,在同一个Session 获得同一个Bean

  • globalSession: 一般用于Porlet应用环境 , 分布式系统存在全局session概念(单点登录),如果不是porlet环境,globalSession 等同于Session
    在开发中主要使用 scope=“singleton”、 scope=“prototype”
    对于MVC中的Action使用prototype类型,其他使用singleton

四.Spring的测试

用Spring包含住Junit4这个测试,让我们执行测试的时候,就已经开始运行Spring了

/**
	 * 如果我们在@ContextConfiguration中没有写路径
	 * 	它会自动在当前包中找一个名称和类一样,后边加上-Context.xml的文件
	 *
	 */
	@RunWith(SpringJUnit4ClassRunner.class)
	@ContextConfiguration("classpath:applicationContext.xml")
	public class SpringTest {
	}

如果不写路径,会在当前包自动去找当前这个 测试类-Context.xml的文件
例:SpringTest -> SpringTest-Context.xml

五.Spring配置细节

  • 1.id与name的区别(早期name可以写特殊符,id不可以写,现在都可以写了,所以都用id)
    2.bean对应的作用域 bean默认是单例的(不管拿多少次,拿到的是同一个) 我们可以配置成多例的 -> <bean … scope=“prototype”>
    3.bean的生命周期(创建到销毁) init-method:初始化方法 destroy-method:销毁的方法(比如说配置一个连接池对象,当使用完毕后就应该销毁

六.三层架构

controller -> service -> dao
  • 1 注入功能
    • 首先准备相应的属性(setUserService)
Class UserController(){
		private IUserService userService;
		public void setUserService(IUserService userService){
			this.userService = userService;	
		}
	}
  • 在配置文件中进入注入
    name-> 类对应的属性 ref->引入的一个bean
 <bean id="userController" class="...UserController">
		<property name="userService" ref="userService" />
	 </bean>

七.Spring配置连接池

  • 注意:必需要加classpath
<context:property-placeholder location="classpath:jdbc.properties" />

  <!-- 表达式中加jdbc前缀  -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	 <property name="driverClassName" value="${jdbc.driverClassName}" />
	 <property name="url" value="${jdbc.url}" />
	 <property name="username" value="${jdbc.username}" />
	 <property name="password" value="${jdbc.password}" />
 </bean>`

八、DI

  • 自动装配(注解方式)
  • Spring标签
  • @Autowired
    • 1,@Autowired标签: 1,通过autowired标签可以让spring自动的把属性需要的对象找出来,并注入到对象

    • 2,autowired标签可以放在字段或者setter方法上面

    • 3,@Autowired public void setter(OtherBean otherBean,OtherBean2 other2) {}

    • 4,使用autowired标签可以注入一些spring内置的重要对象,比如BeanFactory,ApplicationContext;

    • 5,默认情况下,@Autowired标签必须要能找到对应的对象,否则报错;通过required=false来避免这个问题:@Autowired(required=false)

    • 6,第三方程序:spring3.0之前,需要手动配置@Autowired解析程序:spring就会自动的加入针对@Autowired标签的解析程序
      <context:annotation-config />

    • 7,@Autowired找bean的方式:
      1),首先按照依赖对象的类型找;如果找到,就是用setter或者字段直接注入;
      2),如果在Spring上下文中找到多个匹配的类型,再按照名字去找;如果没有匹配,报错;
      3),可以通过使用@Qualifier(“otherBean”)标签来规定依赖对象按照bean的id+类型去找;


public class OtherBean {
}
public class OtherBean2 {
}
public class SomeBean {
	@Autowired
	private OtherBean other;
	@Autowired(required = false)
	private OtherBean2 other2;
	
	public String toString() {
		return "SomeBean [other=" + other + ", other2=" + other2 + "]";
	}
}
<bean id="otherBean" class="cn.itsource.day2._2autowired_ann.OtherBean" />
<bean id="otherBean2" class="cn.itsource.day2._2autowired_ann.OtherBean2" />
<bean id="someBean" class="cn.itsource.day2._2autowired_ann.SomeBean"/>
2025年度工业级3D全景相机技术解析选型参考:国产品牌的技术突围与市场格局 本文分析了工业级3D相机在智慧城市和建筑数字化中的应用。通过对比国内外主流设备的技术参数和应用场景,发现国产品牌如众趣科技在性价比和本地化服务方面具有优势,尤其适合大型空间扫描项目;而国际品牌如Faro、Leica则在精度和可靠性上保持领先。建议根据项目需求(如测距范围、精度要求、预算)进行设备选型,综合考虑扫描效率、数据处理能力和系统兼容性。国产品牌已在国内大型基建项目中展现出竞争力,国际品牌则更适合高精度逆向工程和国际化项目。 阅读详情

相关推荐

深入解析UDS 0x19服务:DTC状态掩码与故障诊断实战

本文深入解析了UDS诊断协议中的核心0x19服务(ReadDTCInformation),重点拆解了DTC状态掩码(DTCStatusMask)的八个状态位及其在故障生命周期中的联动逻辑。通过实战案例,详细说明了从故障发生、确认到清除的全过程,并介绍了如何利用该服务进行深度诊断,包括读取扩展数据(如冻结帧)和避免常见开发误区,是理解汽车ECU故障管理机制的关键。

weixin_29248313的博客 323

spring 多线程 注入 服务层 问题

在用多线程的时候,里面要用到Spring注入服务层,或者是逻辑层的时候,一般是注入不进去的。具体原因应该是线程启动时没有用到Spring实例不池。所以注入的变量值都为null。 详细:http://hi.baidu.com/adrianbutler/item/800218d90f23b0e53dc2cb95 因为我用的是@Autowired注入,不知道为什么 解决不了我的问题,继续查找资料,好...

weixin_34392843的博客 98

实现自动打包py及替换pyinstaller --add-data参数的方法

实现自动打包py及替换pyinstaller --add-data参数的方法

isS_MK_GmbH的博客 3468

idea 编写springBoot项目

一\前期配置 https://blog.csdn.net/lavendeyan/article/details/106040694 二\代码编写 1\目录以及流程 1)先在bean中编写实体类,其次在dao中编写需要实现的方法名,然后在mapper中的xml编写对数据库进行操作的sql语句。 2)在service中,先在接口中编写需要实现的方法名,然后在impl中实现接口中的方法,最后在web.controller中编写对方法执行的控制。 2\Department.java 1、将数据库中

lavendeyan的博客 642

AI算力网络与通信领域流量分析:优化策略探讨_副本

今天的AI就像一个"超级吃货",每天要"吃"掉海量数据、“消耗"巨量算力——训练一个千亿参数的大模型,可能需要上万块GPU同时工作数周,其间产生的数据传输量足以填满数百万个1TB硬盘。这些GPU和计算节点通过网络连接形成"AI算力网络”,而数据在节点间的流动就是"通信流量"。如果把算力比作AI的"肌肉",那流量就是"血液"——血液不通畅,肌肉再强也使不上劲。

AI天才研究院 1198

涨姿势|小众建模软件Make human,MakeClothes插件使用详解教程(2)

衣服可以从头开始建模,或者通过改变人体网格或由MakeClothes工具提供的“服装助手”(见下文)来建模。在设计和建模一件衣物时,应该记住两个限制。首先,将服装网格映射到人体网格的算法要求服装网格完全由四面体组成。其次,知道MakeClothes每件衣服只支持一种材料是很重要的。 完成MakeClothes工作流程后,您的HOME / makehuman / v1 / data / clothes中的工具将创建一个新文件夹。该文件夹将采用用户为服装项目提供的唯一名称。该文件夹将填充必要的资源,以使该项目在

Crazy_in_3Dmax的博客 1874

spring框架学习

Spring是一个开源的、轻量级的容器(包含并管理对象的生命周期)框架Spring是为了解决企业级开发中业务逻辑层中对象之间的耦合问题Spring的核心是IOC和AOP。

weixin_74236078的博客 763

常见js手撕题及算法总结

设计一个lazyMan,实现以下功能: LazyMan(‘Tony’); // Hi I am Tony LazyMan(‘Tony’).sleep(10).eat(‘lunch’); // Hi I am Tony // 等待了10秒… // I am eating lunch LazyMan(‘Tony’).eat(‘lunch’).sleep(10).eat(‘dinner’); // H...

没有名字适合我的博客 3176

Spring 框架学习指南

Spring框架是Java企业级开发的主流选择,以IOC(控制反转)和AOP(面向切面编程)为核心,提供一站式解决方案。学习路径包括:1.掌握IOC容器管理对象依赖的方式(XML/注解/JavaConfig配置);2.理解AOP实现横切关注点模块化(如日志、事务),包括动态代理机制和切面编程实践。前置知识需具备Java基础、设计模式等。Spring生态涵盖Web、微服务等多个领域,通过轻量级、非侵入式设计简化开发,是Java开发者必备技能。

手心朝下的博客 1807

【ESP32】ESP32连接JY61P并通过WIFI发送给电脑

ESP32S连接JY61P并通过WIFI把姿态数据发送给电脑1.采用Arduino IDE编译器;需要安装ESP32的开发板管理器;2.电脑接受数据是基于python的;

Doudou_Nai的博客 1132

Unity开发抖音小游戏存储的几种方法分析

前段时间写小游戏为了省事一直就没有研究抖音小游戏的存储方案,一直使用的是unity中的PlayerPrefs去做的存储,但是后来发现官方会一直提醒让使用抖音sdk中的新文件存储系统,从而降低内存占用。

类人_猿的博客 2533

关于Spring框架的学习

 接触Spring框架差不多快两年多的事,尤记得当时,关于Spring的书籍还不多,而文件分散于网路的各个角落,为了通盘了解Spring,在Google上一遍又一遍的来往收集,拼凑出Spring全图。就技术上而言,我绝不是Spring的真正高手,然而就资讯收集与文字整理的功夫,说我投入很大的心力倒是真的,在学习Spring的过程中,文件收集、实作尝试、观念厘清等,都花上了不少功夫,我将这些功夫的所

林信良(良葛格)的专栏 1万+

ROSTEA软件下载及情感分析详细操作教程(附网盘链接)

原ROST虚拟团队出品的ROST系列文本内容挖掘分析平台,是辅助人文社会科学研究的免费计算平台。该软件可以实现文本预处理、分字、分词、词性识别、特殊名词抽取、词频统计、英文词频统计、情感计算、分类算法、聚类算法等一系列文本挖掘,是人文社科研究和论文写作的一把利器。该软件用户量超过一万人,遍布海内外100多所大学,包括剑桥大学、日本北海道大学、北京大学、清华大学、香港城市大学、澳门大学等众多高校。关于ROSTCM6的安装介绍可以参考之前的文章ROSTCM6软件下载及语义网络分析详细操作教程ROST EA。

m0_64336780的博客 1万+

Spring框架学习大纲

此大纲覆盖Spring核心功能,适合希望深入理解传统Spring配置和原理的学习者。

weixin_43476824的博客 735

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Spring框架学习(HelloWorld)

前言 好久没有写博客了,最近打算学习框架,我是个0基础学习框架的小白,下面和我一起学习吧 刚接触Spring,我不想先去看那些描述语言去了解它的一些什么特性,因为我看了就忘,根本没有任何作用,所以我一开始就想利用Spring的特性去打印一个HelloWorld 准备: 安装SpringSource Tool Suite(sts-eclipse)插件 https://www.liangzl.com/...

weixin_43732570的博客 417

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring框架学习之初学必知技巧

Spring框架学习之初学必知技巧 文章目录 spring官方网址https://spring.io/ spring文档学习网址https://docs.spring.io/spring/docs/ spring jar包下载网址https://repo.spring.io/release/org/springframework...

星辰大数据的博客 774

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring学习框架图

自己学习Spring时整理的学习框架图,希望对自己和别人有帮助。 转载于:https://blog.51cto.com/dumpling/929285

weixin_33857679的博客 136

Spring框架学习

文章目录一、Spring概述二、IOC1、概述2、第一个Spring程序3、Bean的创建4、依赖注入5、Bean的自动装配6、注解开发7、基于java类进行配置8、Bean的作用域和生命周期三、AOP1、代理模式2、概述3、AOP实现四、整合Mybatis1、Mybatis-Spring2、案例实践3、事务管理 一、Spring概述 概念:Spring是一个轻量级的开源框架,是一个具有控制反转(IOC)和面向切片编程(AOP)特点的容器。 组成: Spring Core:核心容器提供 Spring 框架

496

Spring框架全面学习总结

本文系统总结了Spring框架的核心技术与应用实践。首先介绍了反射机制、动态代理和设计模式等基础原理,这些是Spring实现IoC和AOP的技术基础。其次详细解析了IoC容器、Bean管理、依赖注入、AOP和事务管理等核心组件特性。然后对比了XML配置和注解配置两种方式,阐述了自动装配机制及其解决循环依赖的原理。最后介绍了Spring与Log4j2的集成配置方法。全文涵盖了Spring框架从基础到应用的关键知识点,为开发者提供了全面的技术参考。

a52djibg1的博客 1116

如何系统学习Spring框架

1.前言最近有朋友私信胖哥说自己从事Java开发好几年了,但是从来没有系统学习过Spring框架,希望找到一条系统学习Spring的路线来提升一下自己。这像极了以前的我,想学却不知道从哪...

码农小胖哥 2719

如何学习Spring框架?有哪些建议?

Java程序员烂大街了吗?有网友吐槽精通的人少,半吊子的人烂大街。半吊子程序员确实不少,除了自身学习有关,还跟培训机构教学有关,工作后能不能继续学造有关,现在学编程的越来越多,所以企业要求相对也比前些年要高很多。 企业想招一个合格的Jjava程序员很不容易。烂大街的说法有网友不怎么赞同,因为市场自己会过,留下好的淘汰掉不合格的。不合格的程序员有一些会放弃,从事别的工作,也有的会坚持学习达到市场的要求。只不过还有很多人在选择进入这个行业而已,很正常的现象。 以前可能知道大概会怎么使用就能找份不份的工作

chengxuyuan9527的博客 598

spring框架的学习成果

目录一、spring入门1.框架的认识(1)什么是框架(2)重量级与轻量级框架2.spring框架简介Spring与IoC二、spring与AOP三、spring与JdbcTemplate四、spring与事务管理五、参考 一、spring入门 小编第一次接触框架的学习,也才花了一天的时间去学习spring框架,本篇文仅作为记录自己的学习成果。资深者勿入,小小白可以看一下。 1.框架的认识 (1)...

chan_fan的博客 486

Java学习——Spring框架

本文提供了一份2025年最新的Java后端Spring框架学习路线,面向已有Java基础的开发者。学习路径分为6个阶段:从Spring核心、Spring Boot到数据持久层、企业级开发,再到微服务入门和项目实战。文章详细列出了每个阶段的学习内容、推荐资源和必做实战项目,特别强调Spring Boot3.x和MyBatis-Plus等主流技术。最后给出学习建议和免费资源获取方式,承诺3-6个月可掌握企业级开发能力并应对面试。

m0_57545130的博客 1268

Spring MVC 框架学习总结

Woderful life!! 628
上一篇: Java的JS学习
下一篇: Ajax和jQuery
Yuncoco
博客等级 码龄8年 15粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值