java-Spring框架01

news2024/9/20 12:32:55

1.Spring概念

spring是一个轻量级的,IOC和AOP的一站式java开发框架,简化企业级开发。

轻量级:框架体积小(核心模块)

IOC:inversion of Control 控制反转 把创建对象的控制权,反转给Spring框架

以前在程序中需要创建对象,需要new+对象名,例如  new StudentDao对象

AOP:Aspect Oriented Programming 直译过来就是面向切面编程。将程序中的公共的非业务的代码,分离提取出来,然后在业务代码执行时,将其横切进来。使用的动态代理机制实现的,在业务代码中,不显示的调用,但执行业务代码,会通过代理对象,调用非业务代码。

一站式:除了核心的IOC,AOP功能之外,还对数据访问层,web层,都有封装,所以是一站式

2.Spring体系结构

官网地址:https://spring.io/

3.搭建Spring Hello World

1.创建一个Maven工程

2.Maven 导入 spring 核心基础 jar

在pom.xml文件中导入spring依赖jar包

<!-- spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>

2. 编写 spring 配置文件
在resources目录下创建spring.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="admin" class="com.ffyc.springpro.model.Admin"></bean>

</beans>

3.测试结果

public class Test1 {
    public static void main(String[] args) {

        ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
                Admin admin1=(Admin)applicationContext.getBean("admin");//获取到对象名,然后强转成Admin对象
                 Admin admin=  applicationContext.getBean("admin",Admin.class);
        System.out.println(admin);
        System.out.println(admin1);
    }
}

4.IOC(控制反转)

定义:设计思想,就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来

 管理。(把生成的对象的控制权,反转给spring框架,spring框架负责管理对象的整个生命周程,对外提供获取对象的方法,我们在程序中哪里需要使用,在那里获取即可)

作用:IOC 容器负责对象的实例化、对象的初始化,对象和对象之间依赖关系、
对象的销毁、对外提供对象的查找等操作,对象的整个生命周期都是由容器来
控制。
我们需要使用的对象都由 ioc 容器进行管理,不需要我们去手动通过 new
的方式去创建对象,由 ioc 容器直接帮我们组装好,当我们需要使用的时候直
接从 ioc 容器中直接获取就可以了。
正控:若要使用某个对象,需要自己去负责对象的创建
  反控:若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象,
不关心对象的创建过程,也就是把 创建对象的控制权反转给了 Spring 框架 .  

4.spring bean管理

bean对象:由于把对象交给spring管理后,spring会对对象进行功能的增强,所以在是spring框架中生成的对象,统一称为bean对象。

区分这个对象使我们自己new的还是spring框架生成的。

spring中的bean管理有两种方式:

1.基于xml配置方式

bean 配置需要 spring 管理的类
id :生成的对象名
class :全类名 name 对象别名,可以为多个
scope:
singleton(默认值):在 Spring 中只存在一个 bean 实例, 单例模式.
prototype:原型 getBean()的时候都会 new Bean()
request: 每 次 http 请 求 都 会 创 建 一 个 bean, 仅 用 于 WebApplicationContext 环境

xml配置方式依赖注入:

依赖注入在创建对象时,为对象属性赋值

(1)通过属性注入,属性的set方法

<bean id="admin" class="com.ffyc.springpro.model.Admin" scope="singleton">
       <property name="account" value="admin"></property>
       <property name="password" value="111"></property>
   </bean>

(2)通过构造方法注入

<bean id="admin" class="com.ffyc.springpro.model.Admin" scope="singleton">
        <constructor-arg name="account" value="account"></constructor-arg>
    <constructor-arg name="password" value="111"></constructor-arg>
    </bean>

实例:

2.注解方法实现管理

(1)开启注解扫描

在spring.xml配置文件中配置一下代码:

<bean id="admin" class="com.ffyc.springpro.model.Admin" scope="singleton">
        <constructor-arg name="account" value="account"></constructor-arg>
    <constructor-arg name="password" value="111"></constructor-arg>
    </bean>

(2)注解创建对象

model层用@Componen

在com.ffyc.springpro.model包下的Admin.java文件,添加@Component(value=“admin”)

@Component(value = "admin") @Scope(value = "prototype")
//等同于xml中 <bean id="admin" class="com.ffyc.springpro.model.Admin" scope="prototype">

dao层用@Repository

在com.ffyc.springpro.dao包下的AdminDao.java文件,添加@Repository

@Repository(value = "adminDao")等同于xml文件中的
<bean name="adminDao" class="com.ffyc.springpro.dao.AdminDao">

service层用@Service

在com.ffyc.springpro.service包下的AdminService.java文件,添加在com.ffyc.springpro.dao包下的AdminDao.java文件,添加@Repository

@Service(value = "adminService")等同于xml文件中的
<bean id="adminService" class="com.ffyc.springpro.service.AdminService">

可用于这个层的其他注解

1.@Scope

@Scope(value=“prototype”) 原型(多例的) 在每一次获得对象时,创建一个新对象

@Scope(value=“ singleton ”) 单例  在spring框架启动时,就创建对象,始终只创建一个对象

等同于xml文件中的 scope="prototype" scope="singleton "

2.@Autowired

@Autowired spring框架提供的标签/注解, 用于属性和属性的set方法上, 如果写在属性上,set方法都可以不需要, 默认情况下,要注入的值是不能为空的 required=true 如果允许 null 值,可以设置它的 required 属性为 false。

自动注入有两种值的匹配方式

1.通过属性的类型查找

2.通过对象的名字查找

结合@Qualifier注解来找到对象的名字

3.@Resource

是java语言中提供的注解标签 也是添加在属性上,不需要set方法 注入的值也不能为空

自动注入有两种值的匹配方式

1.可通过类型查找注入的对象 @Resource 通过属性类型查找

2.可通过对象名查找注入的对象 @Resource(name = "adminDao")

3.注解与 XML 的对比

注解优点: 方便,直观,高效(代码少,没有配置文件的书写那么复杂)。
注解缺点: 以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。
xml 优点是: 配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重 启服务器即可将新的配置加载。
xml 的缺点是: 编写麻烦,效率低,大型项目过于复杂。

5.Spring 数据访问层管理

Spring 是个一站式框架:Spring 自身也提供了 web 层的 SpringWeb 和 持
久层的 Spring JdbcTemplate。

开发步骤

1.下载 Spring jdbc 数据访问层 jar 包

在pom.xml文件中配置(同时导入mysql依赖和阿里数据源依赖)

<!-- spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>
<!--mysql-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>
<!-- 阿里数据源 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>

2.管理数据源对象

spring 管理数据库链接对象 在spring.xml文件中配置
本次采用阿里巴巴数据库连接管理对象
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai"></property>
    <property name="username" value="root"></property>
    <property name="password" value="root"></property>
    <property name="initialSize" value="10"></property><!--初始化连接数量-->
    <property name="maxActive" value="20"></property><!--最大连接数量-->
</bean>
<!--
配置spring中对jdbc进行封装的操作类,叫JdbcTemplate
-->
<bean class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="druidDataSource"></property>
</bean>

3.测试用例

在AdminDao.java文件中添加方法

在Test中测试方法:

运行结果:

这种就表明数据访问层与数据库连接成功。

6.Spring集成Mybatis

Spring 集成 Mybatis 其核心是将 SqlSessionFactory 交由 Spring 管理,并由
Spring 管理对 dao 接口的代理实现。

1.导入 mybatis jar 包

在pom.xml文件中配置相关配置
<!--mysql-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>
<!--mybaits依赖-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.2</version>
</dependency>
<!-- spring-context spring 核心功能-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>
<!-- spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>
<!-- 阿里数据源 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>
<!--Spring 结合 mybatis 插件包-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.1</version>
</dependency>
<!-- lombok 插件jar包-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    <scope>provided</scope>
</dependency>

2.配置mybatis.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--mybatis核心全局配置文件-->

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>

        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--    全局二级缓存开关-->
        <setting name="cacheEnabled" value="true"/>
    </settings>
    <!--为类配置别名-->
    <typeAliases>
        <!--
                <typeAlias type="com.ffyc.mybaitspro.model.Admin" alias="Admin"></typeAlias>
        -->
        <package name="com.ffyc.ssm.model"/>
    </typeAliases>



</configuration>

3.配置spring.xml文件

配置 sqlSessionFactory
<!--spring 管理生成sqlSessionFactory对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="druidDataSource"></property><!--注入数据源-->
 <property name="configLocation" value="classpath:mybatis.xml"></property><!--配置mybatis配置文件-->
        <property name="mapperLocations" value="classpath:mappers/*Mapper.xml"><!--扫描mapper映射文件-->
        </property>
    </bean>

在 service 中注入 Dao 代理接口,此接口有由Spring 代理实现

指定生成接口代理

<!--生成dao包下所有接口的代理对象-->
<bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.ffyc.ssm.dao"></property><!--指定接口接口所在的包-->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory">
    </property>
</bean>

运行结果测试:

public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
        LoginService loginService=applicationContext.getBean("loginService",LoginService.class);
        Admin admin=new Admin();
        admin.setAccount("admin");
        admin.setPassword("111");
       Admin admin1= loginService.login(admin);
        System.out.println(admin1);
    }
}

7.Lombok

1.概念

Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量。

2.lombok使用

1.安装lombok插件

2.在pom.xml中添加lombok 插件jar包依赖

 <!-- lombok 插件jar包-->
	<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>

3.使用

在com.ffyc.model文件下的Admin.java文件中添加@Data注解,来使用插件

运行结果:


public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml");
        LoginService loginService=applicationContext.getBean("loginService",LoginService.class);
        Admin admin=new Admin();
        admin.setAccount("admin");
        admin.setPassword("111");
       Admin admin1= loginService.login(admin);
        System.out.println(admin1);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SX_c语言字符串赋值 “multiple definition of .. first defined here”问题_21

字符串赋值问题&#xff1a; #include <stdio.h> #include <string.h>char* my_string_cat(int position, int slot, char* content){char* gnsst NULL;static char retvalue[50];memset(retvalue, \0, sizeof(retvalue));if(position 0){//头部if(slot 0){//卡…

【TroubleShoot】Unity中JDK版本问题

在默认安装了Android SDK及OpenJDK后&#xff0c;将项目切换到Android平台&#xff0c;编译时揭示JDK设置不正确。 那就看看吧&#xff0c;警告里提示&#xff1a;You are missing the recommended JDK. Install the recommended version using the Unity Hub。但这就是从Unity…

一天完成论文初稿?来看看这10个大幅提升论文写作效率的原则

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 论文写作对于科研人员尤其重要&#xff0c;我们必须通过写作来获得学位&#xff08;例如&#xff0c;论文&#xff09;、分享我们的研究发现&#xff08;专业会议论文和摘要&a…

【审批流】springboot+vue+activiti平台,直接接入业务表单,成熟工作流

软件资料清单列表部分文档清单&#xff1a;工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用户需求说明书&#xff0c;概要设计说明书&#xff0c;技术解…

【零基础入门】Linux环境搭建详解 | Ubuntu

文章目录 虚拟机安装对比Virtual Box 下载ubuntu 操作系统下载Virtual Box 安装安装ubuntu设置中文语言共享文件夹设置添加输入法安装步骤&#xff0c;参考官方教程 安装 vscode 虚拟机安装对比 VirtualBox和VMware两款虚拟化软件的对比 特性VirtualBoxVMware Workstation Pro许…

从python应用app向微软Microsoft Teams Channel发送消息message

一、简介 有这样的需求&#xff0c;web app需要提供功能可以发送消息到Teams来提醒用户。所以需要将发消息到Teams功能集成到web app中。由于我们的web app是python开发的&#xff0c;所以使用pyteams库。 先看效果&#xff1a;有标题、内容、链接、用户 二、步骤 2.1 首先在…

pikachu靶场XSS通关攻略

1.反射型xss(get) 在输入框中输入1 发现1会停留在页面上 可以尝试xxs攻击 当我们输入弹窗的js代码时 发现输入框的长度不允许我们输入过长的语句 我们可以打开网站控制台&#xff08;f12&#xff09;修补一下输入框的长度 我们把20改成50即可输入剩下的js代码 就会出现弹窗 …

-- 数据结构 顺序表 --Java

顺序表&#xff1a;使用一段物理地址连续的储存单元依此储存元素&#xff0c;一般使用数组实现顺序表的增删查改 实现 顺序表其实就是将元素储存到一个数组中&#xff0c;并且这个数组会根据你的插入的数据的增加而自动进行数组的扩容 字段的设计 使用了多态是为了能储存各种…

C++ | Leetcode C++题解之第377题组合总和IV

题目&#xff1a; 题解&#xff1a; class Solution { public:int combinationSum4(vector<int>& nums, int target) {vector<int> dp(target 1);dp[0] 1;for (int i 1; i < target; i) {for (int& num : nums) {if (num < i && dp[i - …

软考报名信息填错了,还可以修改吗?

软考报名信息的准确性至关重要&#xff0c;它直接关系到考生的考试资格及后续流程。若不慎填写错误&#xff0c;别担心&#xff0c;根据发现错误的时间点&#xff0c;下面是详细的修改指南。 一、报名审核前 情况说明&#xff1a;若您在报名审核前发现信息填写错误&#xff0c…

python库sqlacodegen生成sqlalchemy模型对象代码

工具介绍: 使用SQLAlchemy,需要将数据库表按照其识别的格式创建成Model,但一般情况下都是已经创建并定义好了数据库表,再创建Model。如果人工根据表结构写Model,不仅费时费力,还难免会出错。 而使用sqlacodegen,则可自动生成sqlalchemy表对象模型。 安装 首先进入虚…

黑马JavaWeb开发笔记05——JavaScript介绍、基本语法、函数、对象(Array, String, json, BOM, DOM)、事件监听

文章目录 前言一、JavaScript介绍和引入方式1. 介绍2. 引入方式3. VScode引入演示 二、JavaScript基础语法1. 书写语法2. 变量2.1 var2.2 let2.3 const 3. 数据类型、运算符、流程控制语句3.1 数据类型3.2 运算符3.3 流程控制语句 三、JavaScript函数1. 第一种定义方式2. 第二种…

【C++ Primer Plus习题】6.8

问题: 解答: #include <iostream> #include <fstream> #include <string> using namespace std;int main() {string filename;ifstream stream;char read_char;int count0;cout << "请输入要打开的文件:";getline(cin, filename);stream.op…

文章生成用这三款伪原创软件效果好

在当今信息爆炸的时代&#xff0c;无论是网站运营者、博主、作家还是学生&#xff0c;对文章的需求量越来越大。他们需要用大理的的原创文章来满足他们工作需求。然而&#xff0c;对于许多人来说&#xff0c;写作一篇优质的文章并非易事。这就产生了一种需求&#xff0c;那就是…

【2024】Datawhale AI夏令营-从零上手Mobile Agent-Task1笔记

Task1主要任务是跑通Mobile-Agent Demo。 一、主要步骤 1、申领大模型API 教程推荐使用阿里云百炼平台&#xff0c;申领个人的大模型API后&#xff0c;可通过API KEY调用平台上的视觉-语言大模型。后续使用的视觉-语言大模型为qwen-vl-plus。 2、下载Android Studio 3、在…

Neo4j导入csv数据,并创建节点

Neo4j 是一种图数据库&#xff0c;特别适合管理和分析复杂的关系数据。 数据来源&#xff1a;http://openkg.cn/ 导入到 Neo4j 的合适场景&#xff1a; 需要在物种分类中查找层级关系&#xff08;如物种的科、属等&#xff09;。 需要进行关系查询和图结构的分析。 想在分类树…

[mysql]mysql的演示使用

1&#xff1a;show databases 这里第一个information_schema代表的是数据库的基本系统信息&#xff0c;数据库名称&#xff0c;表的名称&#xff0c;存储权限 第二个是mysql&#xff0c;保存的是我们数据库运行的时候需要的系统信息&#xff0c;比如数据库文件夹 当前的字库集…

算法笔试-编程练习-H-02-24

w这套题&#xff0c;侧重模拟和题目理解&#xff0c;只要按照题目描述正常复现整体分数应该不错 一、数据重删 数据重删是一种节约存储空间的技术&#xff0c;通常情况下&#xff0c;在数据存储池内是有很多重复的数据库。重删则是将这些重复的数据块找出并处理的技术。简单地…

回溯+记忆搜索——力扣每日一题2024.8.25

给定一个整数数组 nums 和一个正整数 k&#xff0c;找出是否有可能把这个数组分成 k 个非空子集&#xff0c;其总和都相等。 示例 1&#xff1a; 输入&#xff1a; nums [4, 3, 2, 3, 5, 2, 1], k 4 输出&#xff1a; True 说明&#xff1a; 有可能将其分成 4 个子集&#x…

复制会话与复制SSH渠道的区别

文章目录 新建会话时干了什么复制会话的时候干了什么复制SSH渠道的时候干了什么复制会话与复制SSH渠道的区别TIPS&#xff1a;1. /dev/pts/n2. 守护进程 新建会话时干了什么 在第一次启动xshell时&#xff0c;提供了新建会话选项&#xff0c;创建过程如下&#xff1a; 创建SSH…