当前位置: 首页 > news >正文

【Java企业级开发】(七)Spring框架

一、初识Spring

Spring介绍

(1)对比以往项目,Spring优势有哪些:方便解耦,简化开发;AOP切面编程;声明式事务;整合各种优秀的框架;

(2)发明者:Rod Johnson(罗宾·约翰逊 )—Java世界的传奇大师,神级人物;Spring FrameWork的缔造者;旷世奇书“葵花宝典”《Expert one on one J2EE Design and Development》作者;Servlet2.4和JDO2.0的规范专家;Java Development Community杰出人物。

(3)不重复造轮子;

(4)使用Spring所需jar包

(5)Spring官网:

Spring | HomeLevel up your Java code and explore what Spring can do for you.https://spring.io/1.2 Spring的模块

二、Spring IOC/DI

Spring IOC/DI介绍

         IOC(Inversion of Control)中文名称:控制反转,也被称为)DI(dependency injection);依赖注入。注意:属于同一件事情的两个名称。

        创建对象的权利,或者是控制的位置,由JAVA代码转移到spring容器,由spring的容器控制对象的创建,就是控制反转。

        由于控制反转改建比较含糊,所以在2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,想对于IoC而言,“依赖注入”明确描述了“被注入对象依赖IoC容器来配置依赖对象”,DI(中文名为依赖注入)是IoC的别名。

三、创建第一个Spring项目

3.1 创建项目,添加依赖

        创建普通Maven项目,在项目的pom.xml中添加Spring项目的最基础依赖。

Spring项目想要运行起来必须包含:

  • spring-context.jar - 它依赖了下面的四个jar
    • spring-core.jar - 它依赖了spring-jcl.jar
      • spring-jcl.jar
    • spring-aop.jar
    • spring-expression.jar
    • spring-bean.jar

        所以在Maven中想要使用Spring框架只需要在项目中导入spring-context就可以了,其他的jar包根据Maven依赖传递性都可以导入进来。

pom.xml

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.9</version></dependency>
</dependencies>

3.2 创建一个类

3.3 创建Spring配置文件

要去Spring官网找到xml配置文件的文档头和约束部分

Container Overview :: Spring Frameworkhttps://docs.spring.io/spring-framework/reference/core/beans/basics.html

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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    构建Book对象--><bean id="b" class="com.spring.pojo.Book"></bean>
</beans>

3.4 创建测试类

package com.study.test;import com.spring.pojo.Book;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {// 创建Spring容器:ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 获取对象Book book = (Book)context.getBean("b");// 打印对象的信息System.out.println(book.getName() + " ---- " + book.getId());}
}

四、属性注入

4.1 属性注入方式

        以前不适用Spring的时候有两种属性注入方式

4.2 属性注入-设值注入

         直接在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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    构建Book对象--><bean id="b" class="com.spring.pojo.Book"><!--设值注入--><property name="id" value="1"></property><property name="name" value="小张学Java"></property></bean>
</beans>

4.3 属性注入-构造注入

        构造注入:这里的name要和有参构造器的参数一致4.4

<?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    构建Book对象--><bean id="b" class="com.spring.pojo.Book"><!--构造注入:这里的name要和有参构造器的参数一致--><constructor-arg name="id" value="2"></constructor-arg><constructor-arg name="name" value="小张学Java"></constructor-arg></bean>
</beans>

4.4 属性注入-引用数据类型

(1)创建两个对象:Girl和Boy,Girl中有Boy对象以及他的getter和setter方法(模拟复杂数据类型)

(2)创建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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--①先构建boy对象--><bean id="boy" class="com.spring.pojo.Boy"><property name="age" value="22"></property><property name="name" value="小帅"></property></bean><!--②传参--><bean id="girl" class="com.spring.pojo.Girl"><property name="age" value="19"></property><property name="name" value="露露"></property><property name="boyFriend" ref="boy"></property></bean>
</beans>

(3)创建测试类,验证传参

package com.study.test;import com.spring.pojo.Girl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test3 {public static void main(String[] args) {// 创建Spring容器:ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 获取对象Girl g = (Girl)context.getBean("girl");System.out.println("女孩名字:"+g.getName()+",女孩男朋友的名字是"+g.getBoyFriend().getName());}
}

五、注解

5.1 什么是注解

         注解其实就是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充详细。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。

5.2 注解的使用

        使用注解时要在其前面增加@符号,并把该注解当成一个修饰符使用。用于修饰他支持的程序元素(包、类、构造器、方法、成员变量、参数、局部变量的声明)。

5.3 注解的重要性

        在JavaSE中,注解的使用比较简单,例如标记过时的功能,忽略警告等。在JavaEE/AeIdroid中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。未来的开发模式都是基于注解的。一定程度上可以说:框架=注解+反射+设计模式

5.4 Ioc/DI相关的注解

注解名称解释
这几个注解的用法跟@Component用法基本一样,只是用的地方不同@Component实例化Bean,默认名称为类名首字母变小写。无需指定setter方法
@Repository

作用和@Component一样,用在持久层

@Service作用和@Component一样,用在业务层
@Controller作用和@Component一样,用在控制器层
@Configuration作用和@Component一样,用在配置类上
@Autowired自动注入。默认byType,如果多个同类型bean,使用byName
@Value给普通数据类型属性赋值

        前五个注解作用一样,之所有搞出这么多,就是在语义上进行区分,放入不同层用不同的注解(@Component可以放在任何层级),但是作用都是创建对象。

5.5 @Component的使用

        (1)在要创建对象的类中加入@Component注解,对象名称默认为:类名首字母变小写

        (2)注解在哪个包下?要想找到这些注解,需要奖注解所在的包进行扫描:设置需要扫描的包。并且在applicationContext.xml中添加context命名空间。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.spring.pojo"></context:component-scan>
</beans>

        (3)获取对象示例

package com.study.test;import com.spring.pojo.Girl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test3 {public static void main(String[] args) {// 创建Spring容器:ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 获取对象Girl g = (Girl)context.getBean("girl");System.out.println("女孩名字:"+g.getName()+",女孩男朋友的名字是"+g.getBoyFriend());}
}

// 这里只是获取到了构建的对象,对象中属性的值并没有注入,所以拿到的都是默认值

5.6 通过注解给对象属性赋值

(1)@Value的使用

        给普通数据类型赋值的注解,普通数据类型包括:八种基本数据类型+String

  • 基本数据类型:6种数字类型(byte/short/int/long/float/double)、1种字符型(char)、1种布尔型(boolean

(2)@Autowired的使用

        添加@Autowired注解后会把容器中的对象自动注入进来,并且不需要依赖set方法

第一步
第二步

 

http://www.lryc.cn/news/611223.html

相关文章:

  • 区块链:重构信任的价值互联网革命​
  • 场外个股期权的额度为何受限?
  • 浮动IP(Floating IP)的删除通常需要满足什么条件
  • 基于ZYNQ ARM+FPGA的声呐数据采集系统设计
  • uniapp转app时,cover-view的坑
  • 什么情况下浮动IP(Floating IP)会“漂移”(Drift)
  • OneCode 3.0 前端架构全面研究
  • ​​机器学习贝叶斯算法
  • MinIO01-入门
  • 本地部署文档管理平台 BookStack 并实现外部访问( Windows 版本)
  • Claude Code 完整指南:入门到应用
  • Flux.1系列模型解析--Flux.1 Tools
  • 鸿蒙组件装饰器深度解析:@Component vs @ComponentV2
  • 代码随想录day57图论7
  • LLM开发——语言模型会根据你的提问方式来改变答案
  • cf.训练
  • 调试|谷歌浏览器调试长连接|调试SSE和websocket
  • 【Spring Cloud】-- RestTeplate实现远程调用
  • 【机器学习深度学习】 知识蒸馏
  • CodeBuddy IDE 使用测评——半小时做一个web可视化数据工具
  • 李宏毅深度学习教程 第12-13章 对抗攻击 + 迁移学习transfer learning
  • 深入理解Spring Boot自动配置原理
  • 解决IntelliJ IDEA 项目名称后带中括号问题(模块名不一致)
  • 解锁高效敏捷:2025年Scrum项目管理工具的核心应用解析
  • 数据结构---Makefile 文件(格式、文件变量、调用、伪目标)、gcc编译的四个步骤、双向链表(概念、作用、应用)
  • RAGFlow 0.20.0 : Multi-Agent Deep Research
  • 机器学习Adaboost算法----SAMME算法和SAMME.R算法
  • 机器学习③【模型训练、K近邻算法(KNN)、贝叶斯算法(Navie Bayes)、模型调优】
  • 无刷电机控制 - STM32F405+CubeMX+HAL库+SimpleFOC05,完成霍尔传感器的校准
  • 智慧社区(八)——社区人脸识别出入管理系统设计与实现