首页 > 其他分享 >Spring的学习运用

Spring的学习运用

时间:2023-10-24 22:07:51浏览次数:29  
标签:String Spring 学习 import println org 运用 方法 public

导入jar包

Spring的学习运用_xml

编写SomeService和SomeServiceImpl

Spring的学习运用_System_02

SomeService.java

package cn.lexed.service;

public interface SomeService {
public abstract void doSome(String company, String founder);
	
	String doOtherr(String company, String founder);
	
	String doFirst(String company, String founder);
	
	void doSecond();
}

SomeServiceImpl.java

package cn.lexed.service.impl;

import org.springframework.stereotype.Service;

import cn.lexed.service.SomeService;
@Service("c")
public class SomeServiceImpl implements SomeService{

	@Override
	public void doSome(String company, String founder) {
		System.out.println("执行工作洽谈业务");
	}

	@Override
	public String doOtherr(String company, String founder) {
		System.out.println("执行核心业务代码");
		return "核心代码";
	}

	@Override
	public String doFirst(String company, String founder) {
        System.out.println("执行了核心业务代码doFirst...");
		return "doFirst";
	}

	@Override
	public void doSecond() {
		System.out.println("执行了业务代码"+(10/0));
	}

}

编写MyAspectJ

@Pointcut:定义和管理切入点,如果你项目里有多个切入点表达式重复的,可以这样使用

       value:切入点表达式

   特点:定义在方法上,此方法的方法名就是切入点表达式的别名

指定通知方法中的参数:JoinPoint

   作用:可以在通知方法中获取方法执行时的信息,例如方法名称方法的实参等

       如果说你需要用到方法里的信息,就加入JoinPoint

       这个JoinPoint参数的值由框架赋予的,必须是第一个位置的参数

@AfterReturning:后置通知

             value:属性值就是切入点表达式

             returning:自定义的变量,表示目标方法的返回值

                       自定义的变量和通知方法的形参名一致

   特点:1.在目标方法之后执行

             2.能够获取到目标方法的返回值,根据这个返回值做不同的处理

环绕通知方法的定义格式:

                  1.public

                  2.必须有一个返回值,推荐使用Object

                  3.方法名自定义

                  4.方法有参数,固定的参数 ProceedingJoinPoint

异常通知方法的定义格式:

                  1.public

                  2.没有返回值

                  3.方法名自定义

                  4.方法中有一个Exception

   @AfterThrowing:异常通知

        属性:value:

                           throwing:表示目标方法抛出的异常对象,名称和方法参数名一致

Spring的学习运用_spring_03

MyAspectJ.java

package cn.lexed.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class MyAspectJ {
	/* @Pointcut:定义和管理切入点,如果你项目里有多个切入点表达式重复的,可以这样使用
	 *     value:切入点表达式
	 * 特点:定义在方法上,此方法的方法名就是切入点表达式的别名
	 * */
	@Pointcut(value="execution(* cn.lexed.service..*(..))")
	public void mypt(){
		//无需代码
	}
	
	/* 指定通知方法中的参数:JoinPoint
	 * 作用:可以在通知方法中获取方法执行时的信息,例如方法名称方法的实参等
	 *     如果说你需要用到方法里的信息,就加入JoinPoint
	 *     这个JoinPoint参数的值由框架赋予的,必须是第一个位置的参数
	 * 
	 * */
	@Before(value="mypt()")
	public void MyBefore(JoinPoint jp){
		System.out.println(jp.getSignature());
		System.out.println(jp.getSignature().getName());
		//获取发放的实参
		Object[] args=jp.getArgs();
		for(Object arg: args){
			System.out.println("创始人="+arg);
			if(arg.equals("华为技术有限公司")){
				System.out.println();
			}
		}
		System.out.println("在洽谈业务之前进行上班打卡");
	}
	
	/*@AfterReturning:后置通知
	 *           value:属性值就是切入点表达式
	 *           returning:自定义的变量,表示目标方法的返回值
	 *                     自定义的变量和通知方法的形参名一致
	 * 特点:1.在目标方法之后执行
	 *     2.能够获取到目标方法的返回值,根据这个返回值做不同的处理
	 * 
	 */ 
	@AfterReturning(value="mypt()",returning="res")
	public void myAfterRe(JoinPoint jp,Object res){
		System.out.println(res);
		if(res.equals("核心代码")){
			//写一些功能
		}else{
			//写一些功能
		}
		System.out.println("在洽谈业务之后进行事务相关的处理");
	}
	
	/* 环绕通知方法的定义格式:
	 *                1.public
	 *                2.必须有一个返回值,推荐使用Object
	 *                3.方法名自定义
	 *                4.方法有参数,固定的参数 ProceedingJoinPoint
	 * 
	 * */
	@Around(value="mypt()")
	public Object myAround(ProceedingJoinPoint pjp) throws Throwable{
		Object o=null;
		System.out.println("在洽谈业务之前进行上班打卡");
		
		pjp.proceed();//doFirst
		
		System.out.println("在洽谈业务之后进行事务相关的处理");
		return o;
	}
	
	/* 异常通知方法的定义格式:
	 *                1.public
	 *                2.没有返回值
	 *                3.方法名自定义
	 *                4.方法中有一个Exception
	 * @AfterThrowing:异常通知
	 *      属性:value:
	 *                throwing:表示目标方法抛出的异常对象,名称和方法参数名一致
	 * */
	@AfterThrowing(value="mypt()",throwing="ex")
	public void myThrow(Exception ex){
		System.out.println("异常通知:方法发送异常时,执行:"+ex.getMessage());
		//发送邮件,短信,通知开发人员
	}
}

编写配置文件(点击Namespaces添加aop、context)

Spring的学习运用_xml_04

app.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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">

<!-- 使用组件扫描器扫描 -->
<context:component-scan base-package="cn.lexed.service"></context:component-scan>
<!-- 声明切面类对象 -->
<bean class="cn.lexed.aop.MyAspectJ"></bean>
<!-- 配置AspectJ的代理机制 -->
<aop:aspectj-autoproxy/>

</beans>

编写测试类

Spring的学习运用_System_05

Test.java

package cn.lexed.test;

import static org.junit.Assert.*;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.lexed.service.SomeService;

public class Test {

	@org.junit.Test
	public void test() {
		//1.创建Spring容器的对象
		ApplicationContext ac=new ClassPathXmlApplicationContext("app.xml");
		SomeService pro=(SomeService)ac.getBean("c");
		pro.doSome("华为技术有限公司", "任正非");
	}
	@org.junit.Test
	public void test1() {
		//1.创建Spring容器的对象
		ApplicationContext ac=new ClassPathXmlApplicationContext("app.xml");
		SomeService pro=(SomeService)ac.getBean("c");
		pro.doOtherr("华为技术有限公司", "任正非");
	}
	@org.junit.Test
	public void test2() {
		//1.创建Spring容器的对象
		ApplicationContext ac=new ClassPathXmlApplicationContext("app.xml");
		SomeService pro=(SomeService)ac.getBean("c");
		pro.doFirst("华为技术有限公司", "任正非");
	}
	@org.junit.Test
	public void test3() {
		//1.创建Spring容器的对象
		ApplicationContext ac=new ClassPathXmlApplicationContext("app.xml");
		SomeService pro=(SomeService)ac.getBean("c");
		pro.doSecond();
	}
}

标签:String,Spring,学习,import,println,org,运用,方法,public
From: https://blog.51cto.com/u_16220922/8009990

相关文章

  • openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户
    openGauss学习笔记-108openGauss数据库管理-管理用户及权限-用户使用CREATEUSER和ALTERUSER可以创建和管理数据库用户。openGauss包含一个或多个已命名数据库。用户和角色在整个openGauss范围内是共享的,但是其数据并不共享。即用户可以连接任何数据库,但当连接成功后,任何用户都......
  • Redis 6 学习笔记 4 —— 通过秒杀案例,学习并发相关和apache bench的使用,记录遇到的问
    背景这是某硅谷的redis案例,主要问题是解决计数器和人员记录的事务操作按照某硅谷的视频敲完之后出现这样乱码加报错的问题 乱码的问题要去tomcat根目录的conf文件夹下修改logging.properties,把下面两个encoding参数都改成GBK就行。其实错误也很明显(ClassNotFoundExceptio......
  • flask 学习之解决flask migrate时报Can't locate revision identified
    错误原因:数据库已经和flask建立的连接,但是项目中migrations/versions下没有迁移版本文件,但是数据库中alembic_version中有版本号,当数据迁移时没有找到对应的迁移脚本文件,解决方案:手动创建迁移脚本:flaskdbrevision-m  然后将数据库中的alembic_version中的version_num改成......
  • Oracle Preinstall 调优参数的学习
    OraclePreinstall调优参数的学习背景学习是一个痛苦并快乐的过程.之前自己手工安装过很多套Oracle数据库,也总结过很多但是很多都是比较皮毛的.最近遇到了一些问题.才发现.快餐只能吃饱,要是想学到东西必须精读.必须多方考证多方学习.用户相关所有的应用都不应......
  • javaweb学习每日总结-第四天
    第四天学习Mybatis 今天在昨天大概学习完mybatis的概念之后,今天跟着案例敲了一边代码,自己亲自操作了一边数据库,过程相对比较顺利,下面我说说自己的感悟把,首先敲代码之前要配置好自己的mybatis.xml文件,然后创建Java类来写方法和对象,创建xml文件,然后用mapper接口将两个文件连接......
  • <学习笔记> 二分图
    二分图最大匹配:定义:给定一个二分图\(G\),即分左右两部分,各部分之间的点没有边连接,要求选出一些边,使得这些边没有公共顶点,且边的数量最大。方法:Dinic/染色二分图的最小顶点覆盖定义:假如选了一个点就相当于覆盖了以它为端点的所有边。最小顶点覆盖就是选择最少的点来覆盖所有的......
  • 多年学习django经验markdown总结,基础到高手,共计50页,10大模块。 第(1)期
    Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原......
  • 【Python】【ChatGPT】本地部署ChatGPT学习记录
    学习一下GPT项目的相关使用和部署 一、GPT4ALL模型Github:https://github.com/nomic-ai/gpt4allGPT4ALL项目部署简易,但是在运行体验上一般,并且是只调用CPU来进行运算,看官方文档介绍在嵌入式上有比较大的优势,但是目前个人对嵌入式方向接触不深,仅在本机部署使用。本机配置(CPU:i5......
  • 学习笔记431—freesurfer下载安装,常用术语和recon-all命令
    freesurfer下载安装,常用术语和recon-all命令1基础知识1.1简介freesurfer是一个分析和可视化大脑结构成像和功能成像的工具包,可以处理MRI、fMRI数据,进行大脑解剖学数据测量等。1.2安装freesurfer目前该软件包仅支持Linux和MacOS系统,且官方推荐下载最新版本。官网下载指南......
  • springboot洗衣店管理系统-计算机毕业设计源码+LW文档
    摘 要随着时代的发展,人们的工作也学习压力越来越大,很多时候空闲时间也越来也少,经常没有时间去洗自己的衣服,很多商家在看到这种情况之后开设了洗衣机店专门用于服务这些没有时间洗衣服的人,但是传统的洗衣店都是用手动的的模式在管理,这种模式很落后,为了改善这一情况很多地方开设了......