Spring课堂练习5

2023-10-04 23:10
文章标签 spring 课堂练习

本文主要是介绍Spring课堂练习5,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

课堂练习
1、增加拯救少女任务类与拯救少女骑士类
在这里插入图片描述

package net.lj.spring.lesson05.aop_xml;import org.springframework.stereotype.Component;@Component
public class RescueDamselQuest {public void embark() {System.out.println("执行救美任务。");}
}

在这里插入图片描述
在这里插入图片描述

package net.lj.spring.lesson05.aop_xml;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class DamselRescuingKnight {@Autowiredprivate RescueDamselQuest rescueDamselQuest;public void embarkOnQuest() {rescueDamselQuest.embark();}
}

在测试代码中创建testDamselRescuingKnight()方法。在这里插入图片描述

package net.lj.spring.lesson05.aop_xml;import net.lhf.spring.lesson05.aop_xml.BraveKnight;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;/**public class TestKnight {private ClassPathXmlApplicationContext context;@Beforepublic void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("aop_xml/spring-config.xml");}@Testpublic void testBraveKnight() {// 根据名称从应用容器里获取勇敢骑士对象BraveKnight braveKnight = (BraveKnight) context.getBean("Mike");// 勇敢骑士执行任务braveKnight.embarkOnQuest();}@Testpublic void  testDamselRescuingKnight(){//根据救美骑士类从应用容器里获取救美骑士对象net.lhf.spring.lesson05.aop_xml.DamselRescuingKnightdamselRescuingKnight =context.getBean(DamselRescuingKnight.class);damselRescuingKnight.embarkOnQuest();}@Afterpublic void destroy() {// 关闭应用容器context.close();}
}

运行testDamselRescuingKnight(),结果:
在这里插入图片描述
创建aop_annotation子包,把aop_xml子包中的文件复制到aop_annotation子包中
在这里插入图片描述
在aop_annotation子包创建注解接口-Action
在这里插入图片描述

package net.lj.spring.lesson05.aop_annotation;import java.lang.annotation.*;@Target(ElementType.METHOD)//拦截目标  -方法
@Retention(RetentionPolicy.RUNTIME) //保持策略 -运行时
@Documented//注释文档
public @interface Action {String name();
}

创建游吟诗人类MinstreAspect

在这里插入图片描述

package net.lj.spring.lesson05.aop_annotation;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;@Aspect
@Component//交给Spring容器管理
public class MinstrelAspect {//注解声明切点@Pointcut("execution(* net.lhf.spring.lesson05..*.embarkOnQuest(..))")public void embark() {}//注解声明前置通知@Before("embark()")public void singBeforeQuest(JoinPoint joinPoint){System.out.println("啦啦啦,骑士出发啦!");}//注解声明后置通知@After("embark()")public void singAfterQuest(JoinPoint joinPoint){System.out.println("真棒啊,骑士完成了任务!");}
}

在aop_annotation子包里创建Spring配置类 - AopConfig在这里插入图片描述

package net.lj.spring.lesson05.aop_annotation;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;@Configuration // 标明是Spring配置类
@ComponentScan("net.lhf.spring.lesson05.aop_annotation") // 组件扫描
@EnableAspectJAutoProxy // 开启Spring对ApectJ的支持
public class AopConfig {
}

在aop_annotation子包里创建测试类 - TestKnight
在这里插入图片描述
在这里插入图片描述

package net.lj.spring.lesson05.aop_annotation;import net.lhf.spring.lesson05.aop_xml.BraveKnight;
import net.lhf.spring.lesson05.aop_xml.DamselRescuingKnight;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestKnight {private ClassPathXmlApplicationContext context;@Beforepublic void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("aop_xml/spring-config.xml");}@Testpublic void testBraveKnight() {// 根据名称从应用容器里获取勇敢骑士对象net.lhf.spring.lesson05.aop_xml.BraveKnight braveKnight = (BraveKnight) context.getBean("Mike");// 勇敢骑士执行任务braveKnight.embarkOnQuest();}@Testpublic void  testDamselRescuingKnight(){//根据救美骑士类从应用容器里获取救美骑士对象net.lhf.spring.lesson05.aop_xml.DamselRescuingKnightdamselRescuingKnight =context.getBean(DamselRescuingKnight.class);damselRescuingKnight.embarkOnQuest();}@Afterpublic void destroy() {// 关闭应用容器context.close();}
}

运行测试方法testBraveKnight(),查看效果
在这里插入图片描述
在按照老师来做的时候,代码出现错误,获取不到Mike
在这里插入图片描述
在这里插入图片描述

package net.lj.spring.lesson05.aop_annotation;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class TestKnight {private AnnotationConfigApplicationContext context;@Beforepublic void init() {// 基于Spring配置类创建应用容器context = new AnnotationConfigApplicationContext(AopConfig.class);}@Testpublic void testBraveKnight() {// 根据名称从应用容器里获取勇敢骑士对象BraveKnight braveKnight = (BraveKnight) context.getBean("Mike");// 勇敢骑士执行任务braveKnight.embarkOnQuest();}@Testpublic void testDamselRescuingKnight(){//根据名称从应用容器里获取救美骑士对象DamselRescuingKnight knight = (DamselRescuingKnight) context.getBean("damselRescuingKnight");//救美骑士执行任务knight.embarkOnQuest();}@Afterpublic void destroy() {// 关闭应用容器context.close();}
}

在测试程序里增加对拯救少女骑士的测试方法 - testDamselRescuingKnight(),运行结果
在这里插入图片描述

这篇关于Spring课堂练习5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/2908

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

SpringMVC入参绑定特别注意

1.直接在controller中定义一个变量,但是此种传输方式有一个限制就是参数名和请求中的参数名必须保持一致,否则失效。 @RequestMapping("test2")@ResponseBodypublic DBHackResponse<UserInfoVo> test2(String id , String name){UserInfoVo userInfoVo = new UserInf