原来的配置文件不用了。新建一个config.springconfig文件,添加@configuration, @componentScan("要扫描的包",如有多个包在大括号内添加)包内的类只要加了相应注解的,都会被加载为bean。
应用程序中获取容器的方法要改,applicationcontext ctx = new annotationconfigapplicationcontext(新配置类 ***.class)
类名 对象名 = ctx.getbean(类.class)
在要创建bean的类上,添加注解。用于给配置类去扫描。
十一、注解开发bean的作用范围和生命周期控制
类加注解:@scope("prototype")
。。控制不用再实现接口,直接自己写方法,但是加注解:
@postconstruct 代表是创建之后执行。
@predestroy 代表销毁前执行。
并且应用程序要改为
anotationconfigapplicationcontext ctx = new annotationconfigapplicationcontext(新配置类 ***.class)
才能调用生命周期方法ctx.close() ctx.init()
十二、注解开发依赖注入:自动装配
引用类型注入:
连set方法都不用了,加注解@Autowired。!
当使用@autowired注解时,你不需要再去写getter和setter方法了。
没啥用
简单类型注入:@value
用property文件内的值注入
总结注解开发:
一、AOP面向切面编程思想
在不改变原始设计的基础上进行功能增强。
将程序的共性功能抽取,在通知类中定义通知方法,方法里写共性功能。
将需要执行通知的方法,定义为切入点。而连接点是所有方法。切面表示在哪个切入点执行哪个通知。
切入点一定在连接点中。
二、AOP入门
1.pom.xml坐标导入
2.springconfig配置文件
加入@enableaspectjautoproxy。其他接口和实现类不变。
3.
4.
5.
6.
三、AOP工作流程
切入点表达式:
四、AOP通知类型
1.@before("pt()")
2.@after("pt()")
3.@around("pt()")
切入点无返回值:
切入点有返回值:
AOP获取数据没听。
spring事务
spring事务角色
Datasource
SpringMVC
1.
, 实现了Model,View和Controller之间的职责解耦
比servlet简单快捷。
2.入门
Controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。
创建配置文件 加载控制类bean。只管理controller包的bean。
加载springmvc环境。
加载spring容器配置和springmvc的写法一样。
3.总结
4.流程
单次请求过程!!!
5.spring加载的bean和springmvc加载bean如何分开管理呢
· 一个是用大括号,把要扫描的包写详细。!!!
· 用filter写明要过滤的部分。
总结
6.postman
7.请求映射路径
在类上加@requestmapping。
8.get与post请求
· get
问号后写参数,用&连接。
参数在形参内接收。
· post 表单传参
请求体。
配置文件加
9.响应
跳转页面,没加responsebody
返回字符串 默认情况
返回json对象
返回json集合
10.REST风格 不是规范
路径名写成模块名的复数。
删除的写法,id写在路径后面,方法里要加@注释。
其他的写法要去改访问路径,再写method。
json和路径比较常用。
11.简化 以后用这个写
-
IOC,即“控制反转”(Inversion of Control)
-
将控制权从应用程序代码中转移到框架或容器中
-
对象的创建、组装和管理都由框架来完成
-
依赖注入
-
将一个对象的依赖关系传递给另一个对象
-
构造函数注入(Constructor Injection)
-
通过类的构造函数传入依赖对象。对象在实例化时必须提供其依赖项。
-
保证了在创建对象时必须提供依赖项
-
-
属性注入(Property/Setter Injection)
-
通过类的属性或 setter 方法注入依赖对象。对象实例化后可以通过公开的属性或者 setter 方法设置依赖。
-
-
接口注入(Interface Injection)
-
方法注入(Method Injection)
-
-
-
aop
-
是一种编程范式
-
将横切关注点(cross-cutting concerns)从核心业务逻辑中分离出来,横切关注点指的是影响应用程序多个部分的功能,比如日志记录、安全性、事务管理等。
-
• 切面(Aspect): 包含了横切关注点的模块或类。
-
• 连接点(Join Point): 在程序执行过程中可以插入切面的点,
-
• 通知(Advice): 切面在连接点上执行的动作
-
• 切点(Pointcut): 匹配连接点的表达式,确定在哪些连接点应用通知。
-
• 织入(Weaving): 将切面应用到目标对象并创建新的代理对象的过程。
-
@Component @Aspect @Pointcut @Before @After @AfterReturning @AfterThrowing @Around
-
-
注解 springmvc
-
用于简化和控制控制器(Controller)和请求处理的方式
-
@Controller
-
用于标记类为Spring MVC的控制器,处理HTTP请求
-
-
@RequestMapping
-
用在类级别和方法级别,用来定义URL路径和请求方法
-
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping:** 分别用于处理GET、POST、PUT和DELETE请求,是@RequestMapping的缩写形式。
-
-
@RequestParam
-
从请求中获取参数值,将 HTTP 请求中的参数与方法中的参数进行绑定
-
-
@PathVariable 变量
-
将URL中的模板变量绑定到方法参数
-
-
@RequestBody 请求
-
将HTTP请求的body部分绑定到方法参数,处理JSON或XML格式的数据
-
-
@ResponseBody 回应
-
将方法的返回值直接作为HTTP响应的body部分返回,用于返回JSON或XML格式的数据。
-
-
@ModelAttribute 模型属性
-
将方法返回的对象添加到模型中,用于在视图中渲染表单。
-
-
@ExceptionHandler 处理程序
-
处理特定类型的异常
-
-
@InitBinder
-
初始化数据绑定器,用于定制数据绑定过程
-
-
-
软件开发中常见的三层架构各种注解的作用
-
表现层(Presentation Layer)
-
用于处理用户请求和渲染视图
-
@Controller
-
@RequestMapping
-
@RequestParam
-
@ModelAttribute
-
-
业务逻辑层(Business Logic Layer)
-
用于处理业务逻辑
-
@Service
-
标记类为服务层组件,在业务逻辑层中处理业务逻辑
-
-
@Transactional
-
声明方法或类的事务行为,管理数据库事务
-
-
-
持久层(Persistence Layer)
-
用于与数据库交互
-
@Mapper
-
-
@Repository 存储库
-
标记类为数据访问层组件(DAO),负责与数据库交互
-
-
@Entity、@Table、@Column
-
JPA和Hibernate中用于实体映射的注解,用于将Java类映射到数据库表和字段
-
-
@Id、@GeneratedValue 生成值
-
指定实体的主键和生成策略
-
-
-
-
mybais 最原始的开发方式四个统一
-
1.映射文件名和接口名一致(除扩展名)
-
2.映射文件的名称空间(namespace) 必须是该接口的全限定类名
-
3.查询id (select) 必须跟接口内方法名一致
-
4.包结构必须完全一致
-
-
Mybatis——关联映射
-
是一个用 Java 编写的持久层框架
-
<association> 标签表示一对一关系
-
<resultMap> 定义了主表和相关表的映射关系,使用 <collection> 标签表示一对多关系和多对多关系
-
-
Spring MVC阶段测试
-
静态资源文件 C、src/main/resources/static
-
Web的模板文件 D.src/main/resources/templates
-
application.properties存放的目录 C、src/main/resources
-
ModelAndView类使用addObject方法存储数据
-
实现重定向到“main.html”页面B@RequestMapping("/login") public String login( ){ return "redirect:/ main.html"; }
-
自定义拦截器 C、HandlerInterceptor
-
preHandle(在处理器执行前调用)、
-
postHandle(在处理器执行后调用但在视图渲染之前)、
-
afterCompletion(在视图渲染之后调用)
-
-
注册拦截器
-
@Configuration
-
@Override public void **(5)addInterceptors**
-
InterceptorRegistration ir=registry.addInterceptor(**(6)new Interceptor1( )** );
-
// 拦截interceptor路径下所有请求 ir.addPathPatterns("(7)/interceptor/*");
-
-
-
U+代码
-
Spring IoC属性注入使用set方法注入
-
<property name ="bookname" value="数据结构"/>
-
-
使用有参数构造注入
-
<constructor-arg name ="bookname" value="数据结构"/>
-
-
注入对象类型属性
-
< property name ="userDao" ref ="userDao"/>
-
-
注解注入属性
-
@Autowired @Override
-
-
注解用于处理请求地址映射
-
@RequestMapping("/hello1")
-
-
响应为JSON数据集
-
@ResponseBody (3)@PathVariable("id")
-
-
按bookId查询,查询bookId的值为“001”的图书,显示结果JSON格式
-
* 请写出URL地址: http://localhost:8080/**book/getById?bookId=001
-
-
上传文件JSP /WEB-INF/jsp/file/upload.jsp
-
form method="**(1)post**"action="/upload /multipart" enctype="**(2)multipart/form-data**"> <input type="file" name="photo" value="请选择上传的文件" /> <input type="submit" value="提交" />
-
-
文件上传控制器
-
@Controller @PostMapping("/upload/multipart") public **(5)@ResponseBody** Map<String, Object> upload((6)@RequestParam ("photo") **(7)MultipartFile** photo)return **(8)dealResultMap**(false, "上传失败"); } return **(9)dealResultMap**(true, "上传成功");
-
处理上传文件结果 return **(10)result **
-
-
通过控制类访问index.html
-
**(1)@Controller **
-
-
处理请求的控制类LoginController
-
**(2)@Controller **
-
@PostMapping("**(3)/login**")
-
public ModelAndView login(**(4)@RequestParam**("loginName") String loginName,**(5)@RequestParam**("password") String password,ModelAndView mv)
-
-
处理请求的控制类 MainController
-
@Controller
-
@RequestMapping("**(6)/main**")
-
-
*部门表和员工表
-
private **(1)Dept** dept; //定义员工和部门的关系 dept为成员变量
-
private **(2)List<Emp>**; emps; //定义部门和员工的关系,emps为成员变量
-
-
-
实验一
-
.applicationContext.xml 文件中属性注入(采用<property>元素)
-
、IoC实现—基于注解方式
-
添加注解@Repository 存储库 @Service @Autowired 自动装配
-
-
AOP实现_注解方式
-
-
实验二:MVC框架技术应用——URL映射及方法参数的使用
-
Spring MVC 是基于Spring 基础框架派生出来的Web框架
-
围绕DispatcherServlet 而工作 调度员
-
-
。Spring MVC一开始就定位于一个较为松散的组合,展示给用户的视图(View)、控制器返回的数据模型(Model)、定位视图的视图解析器(ViewResolver)和处理适配器(HandlerAdapter)等内容是独立的。
-
Spring MVC 全流程
-
HTTP Request
-
HandlerMapping
-
HandlerExecutionChain
-
-
HandlerAdapter
-
ModelAndView
-
ViewResolver
-
View
-
-
网页
-
div 组织内容,设置样式
-
table 展示行和列的二维数据
-
<tr 定义表格中的行
-
<td> 定义表格中的数据单元格
-
<c:out 在 JSP 页面中输出内容。它用于避免简单的字符串拼接可能导致的一些问题
-
<input> 是 HTML 中用于创建输入字段的标签。用户可以在这些字段中输入文本、选择选项或提交表单数据。
-
c:forEach 方便地遍历集合或数组中的每个元素,并对每个元素执行相应的操作
-
-
:JSON 视图是没有视图解析器的定位视图的,因为它不是一个逻辑视图,只是需要将数据模型(这里是User对象)转换为JSON而已
-
@RequestMapping
-
使用@RequestParam获取参数
-
// 此处需要告知传递参数类型为JSON,不能缺少
-
contentType : "application/json",
-
-
// 将JSON转化为字符串传递
-
data : JSON.stringify(params),
-
-
通过@RequestBody注解得到JSON参数
-
//访问模型层得到数据
-
List<User> users=userService.findAllUser();
-
-
//模型和视图
-
ModelAndView mv=new ModelAndView();
-
-
//定义模型视图
-
mv.setViewName("user/details1");
-
-
//加入数据模型
-
mv.addObject("users", users);
-
-
//返回模型和视图
-
return mv;
-
-
-
通过URL传递参数
-
通过处理器映射和注解@PathVariable的组合获取URL参数。
-
/@PathVariable 通过参数名称获取参数
-
//获取提交参数
-
@PostMapping("/format/commit")
-
@ResponseBody
-
-
-
-
实验三:MVC框架技术应用 ——Spring Boot文件上传及@ModelAttribute注解的使用
-
Spring MVC提供MultipartFile接口作为参数来处理文件上传
-
getOriginalFilename 获取上传的文件名字
-
getInputStream 获取一个InputStream
-
getSize 上传文件的大小
-
isEmpty 文件上传内容为空,或者没有文件上传
-
-
单个文件上传
-
@PostMapping("/upload/multipart")
-
@ResponseBody
-
@RequestParam("photo") MultipartFile photo
-
<input type="file" name="photo" value="请选择上传的文件" />
-
#指定默认上传的文件夹
-
spring.servlet.multipart.location=d:/temp1/
-
-
#限制单个文件最大大小
-
spring.servlet.multipart.max-file-size=5242880
-
-
#限制所有文件最大大小,这里设置为20MB
-
spring.servlet.multipart.max-request-size=20MB
-
-
使用@RequestParam注解来限制上传文件的类型。
-
-
批量文件上传
-
@RequestParam("photo") MultipartFile[] photos
-
使用数组来接收多个上传的文 件
-
form method="post" action="./multipart1" enctype="multipart/form-data">
-
<input type="file" name="photo" value="请选择上传的文件" /><p>
-
<input type="file" name="photo" value="请选择上传的文件" /><p>
-
<input type="submit" value="提交" />
-
-
文件上传控制器
-
@GetMapping("/upload/page1")
-
@PostMapping("/upload/multipart1")
-
@ResponseBody
-
-
-
实验四:Spring Boot 整合Mybatis
-
MyBatis 框架是一个 Java 持久层的框 架,,它几乎可以替代 JDBC,同时提供了接口编程,只需要一个接口和XML(或者注解)
-
1)封装JDBC 操作
-
2)利用反射打通Java类和sql语句之间的关系
-
-
MyBatis 框架包括两种类型的XML文件
-
一类是配置文件,即mybatis-config.xml
-
包含了<mappers></mappers>节点,这里就是MyBatis 映射器
-
-
一类是映射文件,例如XXXMapper.xml等
-
-
MyBatis 映射器分为三类
-
1)纯XML映射器,利用SqlSession的各种方法实现增删改查
-
(2)XML映射器+接口映射器的混合类型
-
其中xml映射器的namespace应该对应接口映射器的类名
-
MyBatis 内部运用了动态代理技术,生成接口的实现类,从而完成接口的相关功能
-
-
(3)注解+接口映射器的混合形式
-
-
// 注入用户服务类
-
@Autowired
-
-
// 1.通过URL传递参数
-
@GetMapping("/{id}")
-
-
// 相应为JSON数据集
-
@ResponseBody
-
-
// @PathVariable 通过参数名称获取参数
-
public User get(@PathVariable("id") Integer id)
-
-
// 访问模型层得到数据
-
List<User> users = userService.findAllUser();
-
-
@MapperScan
-
-
实验五:Spring Boot 整合Mybatis——关联映射(
-
一对一
-
在<resultMap>元素中包含一个<association>子元素
-
property - 对象属性的名称 ,用来指定关联属性
-
column - 所对应的外键字段名称
-
javaType - 对象属性的类型
-
select –指定映入嵌套查询的子SQL语句,即使用另一个查询封装的结果。
-
-
//一名员工只能在一个部门
-
private Dept dept;
-
-
-
一对多
-
在<resultMap>元素中包含一个<collection>子元素
-
ofType 属性与javaType 属性对应用于指定实体对象中集合类属性所包含的元素类型。
-
-
//一个部门有多名员工
-
private List<Emp>emps;
-
-
-
多对多可以表示为两个一对多
-
嵌套查询
-
通过执行另外一个SQL 映射语句来返回预期的复杂类型
-
-
-
实验六:Spring Boot整合Mybatis——注解方法
-
@Select 注解映射查询
-
/@Results用于映射对象属性和数据库列,常用于对象属性和数据库列不同名情况
-
@Result
-
-
使用注解映射无需编写映射文件,只需在接口的方法上使用注解实现对SQL语句的映射,从而简化程序的开发
-
引用id=“userResult”的Results
-
@ResultMap("userResult")
-
-
.基于注解的一对一关联映射
-
@One
-
-
//根据id查询班级信息
-
public Sclass findClassById(Integer id);
-
-
、基于注解的一对多关联映射
-
@Many
-
-
DeptController 类
-
@Controller
-
@RequestMapping("dept")
-
@Autowired
-
通过URL传递参数
-
@GetMapping("/{deptno}")
-
-
相应为JSON数据集
-
@ResponseBody
-
-
@PathVariable 通过参数名称获取参数
-
public Dept getDeptByDeptno(@PathVariable("deptno") Integer deptno)
-
-
-