spring快速上手

一、基础概念

1.使用spring后,被spring管理的类,不需要再new。

2.要想类被spring管理,则需要通过bean的方式,把类引入到spirng的配置文件中。

二、导入spring框架

导入spring依赖

    <properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><spring.version>4.0.1.RELEASE</spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.2</version></dependency></dependencies>

在资源目录下创建spring-config.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"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"></beans>

三、第一个IOC

创建一个实体类User

// 省略了getset
public class User {private int uid;private String uname;private String upassword;
}

注册bean

    <bean id="zhangsan" class="com.pojo.User"><property name="uname" value="张三"/><property name="upassword" value="123"/></bean>

测试

public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");User user = (User) context.getBean("zhangsan");System.out.println(user.getUname());
}

四、第一个AOP

AOP的理解:

  • 将复杂的需求分解出不同方面,将散布在系统中的“公共功能”“集中解决”
  • 采用代理机制组装起来运行,在“不改变原程序”的基础上对代码段进行增强处理,增加新的功能

1、创建增强类

package com.advice;public class LoggerAdvice {public void before(){System.out.println("LoggerAdvice.before()");}
}

2、创建要切入的业务类

package com.service;public class UserService {public void login() {System.out.println("login");}
}

3、注册到spring中和配置切面

<bean id="userService" class="com.service.UserService"></bean><bean id="loggerAdvice" class="com.advice.LoggerAdvice"/><aop:config><aop:pointcut id="pointcut" expression="execution(* com.service.*.*(..))"/><aop:aspect ref="loggerAdvice"><aop:before method="before" pointcut-ref="pointcut"/></aop:aspect>
</aop:config>

五、IOC扩展

package com.printor;public interface Ink {public void show();
}
package com.printor;public class InkColor implements Ink{@Overridepublic void show() {System.out.println("彩色");}
}
package com.printor;public interface Paper {public void show();
}
package com.printor;public class PaperA4 implements Paper{@Overridepublic void show() {System.out.println("A4纸");}
}
package com.printor;public class PaperB5 implements Paper{@Overridepublic void show() {System.out.println("B5");}
}
package com.printor;public class HPPrintor {private Ink ink;private Paper paper;public void print(String content) {System.out.println("HP打印机打印内容:" + content);this.ink.show();this.paper.show();}public Ink getInk() {return ink;}public void setInk(Ink ink) {this.ink = ink;}public Paper getPaper() {return paper;}public void setPaper(Paper paper) {this.paper = paper;}
}

将以上的类,注册到spring中

    <bean id="inkColor" class="com.printor.InkColor"></bean><bean id="paperA4" class="com.printor.PaperA4"></bean><bean id="paperB5" class="com.printor.PaperB5"></bean><bean id="hpPrintor1" class="com.printor.HPPrintor"><property name="ink" ref="inkColor"/><property name="paper" ref="paperA4"/></bean><bean id="hpPrintor2" class="com.printor.HPPrintor"><property name="ink" ref="inkColor"/><property name="paper" ref="paperB5"/></bean>

通过注解实现

<context:component-scan base-package="com.printor"></context:component-scan>

InkColor、PaperA4、PaperB5、HPPrintor类上增加@Component注解

@Component
public class HpPrintor {@Autowiredprivate Ink ink;@Autowired@Qualifier("paperA4")private Paper paper;
}

六、AOP扩展

使用注解实现

    <context:component-scan base-package="com.service"></context:component-scan><aop:aspectj-autoproxy/>
package com.advice;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;import java.util.Arrays;@Aspect
@Component
public class PrintAdvice {@Pointcut("execution(* com.service.*.*(..))")public void pointcut(){}@Before("pointcut()")public void before(JoinPoint joinPoint) {System.out.println("打印前");String target = joinPoint.getTarget().toString(); // 类String method = joinPoint.getSignature().getName(); // 方法String args = Arrays.toString(joinPoint.getArgs()); // 参数列表System.out.println(target);System.out.println(method);System.out.println(args);}@After("pointcut()")public void after() {System.out.println("打印后");}@AfterReturning(pointcut = "pointcut()",returning = "ret")public void afterReturning(JoinPoint joinPoint, Object ret) {System.out.println("打印成功");}@AfterThrowing(pointcut = "pointcut()",throwing = "e")public void afterThrowing(Exception e) {System.out.println("打印失败");}@Around("pointcut()")public Object around(ProceedingJoinPoint joinPoint) {System.out.println("打印中");Object result = null;try {// 执行目标方法result = joinPoint.proceed();// 返回通知逻辑System.out.println("After method execution, result: " + result);} catch (Exception e) {// 异常通知逻辑System.out.println("Exception occurred: " + e.getMessage());} catch (Throwable e) {e.printStackTrace();} finally {// 后置最终通知,无论是否发生异常都会执行System.out.println("Finally block executed");return result;}}
}

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

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

相关文章

2-requests模块(6节课学会爬虫)

2-requests模块&#xff08;6节课学会爬虫&#xff09; 1&#xff0c;安装requests2&#xff0c;发送get&#xff0c;post请求&#xff0c;获取响应3&#xff0c;response的方法方法一&#xff08;Response.text&#xff09;方法二&#xff08;response.content.decode()&#…

Docker 查看源地址/仓库地址,更改

一、源地址文件配置路径。若有docker文件夹&#xff0c;没有json&#xff0c;可以新增&#xff0c;复制进去内容 /etc/docker/daemon.json {"registry-mirrors": ["https://dockerhub.azk8s.cn","https://hub-mirror.c.163.com"&#xff0c;&q…

JWT权限验证

在Web开发中&#xff0c;用户认证和授权是确保系统安全和数据安全的关键环节。随着前后端分离、微服务架构等技术的普及&#xff0c;传统的基于session的用户认证机制已经很难去满足现代Web应用的需求。JWT&#xff08;JSON Web Tokens&#xff09;作为一种轻量级的认证和授权机…

【数据分析】1、用Pandas计算数据相关性系数

相关性系数和相关分析是了解变量之间关系的重要工具。通过合理选择相关性系数和科学分析数据&#xff0c;能够有效揭示变量之间的关系&#xff0c;为进一步研究和决策提供有力支持。在实际应用中&#xff0c;应结合业务背景、数据特性和统计原则&#xff0c;谨慎解释和应用相关…

物联网相关

因为收藏夹上限了&#xff0c;所以只能这个帖子来记录物联网相关得文章了。 链接: 搭建自己的MQTT服务器、实现设备上云(WindowsEMQX) 链接: Windows系统下本地MQTT服务器搭建&#xff08;保姆级教程&#xff09;

【小学期】常用基于Swing的七个静态界面

示例1&#xff1a;基本的带按钮和标签的界面 import javax.swing.*; import java.awt.*;public class SimpleSwingApp1 {public static void main(String[] args) {JFrame frame new JFrame("Simple Swing App 1");frame.setDefaultCloseOperation(JFrame.EXIT_ON_C…

【linux】从零到入门

linux概述 Linux是一个免费使用和自由传播的一套操作系统。用户可以无偿地得到它地源代码&#xff0c;和大量地应用程序&#xff0c;并且可以随意修改和增加它们。 Linux的内核起初由林纳斯编写。内核是啥&#xff1f; 驱动设备&#xff0c;文件系统&#xff0c;进程管理&…

UE5(c++)demo开发日志(1):Actor类添加

工具---新建c类---选用Actor&#xff0c;创造出头文件(.h&#xff0c;用于声明变量、函数、重写父类函数等)和源文件(.cpp&#xff0c;涉及到具体功能实现)&#xff0c;客户端界面成功显示出来新建类&#xff1a; Actor头文件默认方法简介&#xff1a; UCLASS(): ue提供的宏&a…

算法-位运算基础

文章目录 1. 前置知识2. 交换两个数3. 比较两个数的大小3. leetcode268 寻找缺失的数字4. leetcode136 只出现一次的数字5. leetcode260 只出现一次的数字|||6. leetcode137 只出现一次的数字||7. 2/3的幂8. 大于等于该数字的最小2的幂9. leetcode201 数字范围按位与10. 位运算…

Docker部署Dillinger个人文本编辑器

Docker部署Dillinger个人文本编辑器 一、Dillinger介绍1.1 Dillinger简介1.2 Dillinger使用场景 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、拉取Dillinger镜像五、部署Dill…

汇聚荣拼多多运营好吗?

在当前电商行业竞争激烈的背景下&#xff0c;拼多多凭借其独特的商业模式和市场定位迅速崛起&#xff0c;成为众多商家和品牌争相入驻的平台。对于“汇聚荣拼多多运营好吗?”这一问题&#xff0c;答案是肯定的。拼多多不仅提供了一个广阔的市场空间&#xff0c;还通过其创新的…

HTML5+JavaScript单词游戏

HTML5 JavaScript单词游戏 数据字典格式&#xff1a;每行一个 单词 &#xff0c;单词和解释用空格分隔&#xff0c;如 a art.一(个)&#xff1b;每一(个) ability n.能力&#xff1b;能耐&#xff0c;本领 able a.有能力的&#xff1b;出色的 baby n.婴儿&#xff1b;孩子…

数据库对比脚本,java如何对比两个数据库的表字段的不同

因为有时候开发环境和 测试环境&#xff0c;有时候会有不同的数据库表&#xff0c;比如有些加字段了&#xff0c;所以这个脚本就实现了对比两个数据库连接的数据库到底哪里不一样&#xff0c;输出到控制台 package com.junfun.pms;import lombok.extern.slf4j.Slf4j;import ja…

25届最近5年北京工业大学自动化考研院校分析

北京工业大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、初试大纲复试大纲 七、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试科目介绍 2、指定教…

C++进修——C++核心编程

内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制编码&#xff0c;由操作系统进行管理全局区&#xff1a;存放全局变量和静态变量以及常量栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数值&#xff…

grpc学习golang版( 三、proto文件数据类型 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、proto语法二、proto中的标量类型三、proto中的数组类型四、p…

资料导览(持续更新)

经典推荐 多模态大模型&#xff1a;基础架构 图解DSPy&#xff1a;Prompt的时代终结者&#xff1f;&#xff01; vLLM, LMDeploy, MLC-LLM, TensorRT-LLM, and TGI的性能小实验 优雅谈大模型13&#xff1a;一文读懂LoRA/DoRA/MoRA 新鲜速递&#xff1a;图解新颖LLM的CoPE位…

C#测试调用DotnetSpider爬取网页内容

微信公众号“DotNet”的文章《.NET快速实现网页数据抓取》介绍了调用开源网页爬取模块DotnetSpider爬取cnblog网站文章的基本方式。之前学习过使用HtmlAgilityPack抓取并分析网页内容&#xff0c;DotnetSpider也依赖HtmlAgilityPack模块&#xff0c;不过前者属于轻量、高效的爬…

C++ 运算符的优先级和结合性表

优先级和结合性表 优先级运算符描述结合性1::作用域解析运算符左到右2() [] . -> --后缀运算符左到右3 -- - ! ~ * & sizeof new delete typeid一元运算符右到左4* / %乘除取模左到右5 -加法和减法左到右6<< >>左移和右移左到右7< < > >关系…

大数据开发如何管理项目

在面试的时候总是 会问起项目&#xff0c;那在大数据开发的实际工作中&#xff0c;如何做好一个项目呢&#xff1f; 目录 1. 需求分析与项目规划1.1 需求收集与梳理1.2 可行性分析1.3 项目章程与计划 2. 数据准备与处理2.1 数据源接入2.2 数据仓库建设2.3 数据质量管理 3. 系统…