原来的配置文件不用了。新建一个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)
-
-
-