Spring

Spring

两个核心特性:
依赖注入(dependency injection, DI)
面向切面编程(aspect-oriented programming, AOP)

POJO plain ordinary java object

创建应用组件之间协作的行为称为装配(wiring),Spring有多中装配,常用XML。

Spring通过应用上下文(Application Context)装载bean的定义,并把它们组装起来。它全权负责对象的创建和组装。


AOP允许把遍布应用各处的功能分离出来形成可重用的组件。
首先声明为Spring bean,然后,再通过Spring配置转变成切面。


Spring通过面向POJO编程、DI、切面和模板技术来简化Java开发。


在基于Spring的应用中,对象生存在Spring容器中,且容器负责创建、装配、配置并管理它们的整个生命周期。

从应用上下文加载,然后调用上下文的getBean()


1. @RequestMapping

除了修饰方法,还可以修饰类。
方法处,进一步提供细分映射信息,相对于类定义处的URL。若类定义处未标记@RequestMapping,则方法处标记的URL相对于WEB应用的根目录

value,method,params headers 多个属性是与的关系

常用method来指定请求方法
可以使用params和headers更加精确的映射请求

2. @PathVariable
可以映射URL中的占位符到目标方法的参数中

3. rest 资源表示层状态转化

HTTP协议
GET POST PUT DELETE
获取 新增 更新 删

Rest 风格的URL

以CRUD为例:
新增:/order POST
修改:/order/1 PUT
获取:/order/1 GET get?id=1
删除:/order/1 DELETE delete?id=1

如何发送PUT请求和DELETE请求

配置HiddenHttpMethodFilter
发送POST请求
发送POST请求时,携带一个name="_method"的隐藏域,值为DELETE或PUT


4. @RequestParam

映射请求参数。
value 值即为请求参数的参数名
required 该参数是否必须,默认为true
defaultValue默认参数

5. @RequestHeader
映射请求头信息
用法同@RequestParam


6. @CookieValue
映射一个cookie值,属性同@RequestParam

7. 使用POJO作为参数

Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配
自动为该属性对象填充属性。支持级联属性 dept.deptId dept.address等。

8. 可以使用Servlet原生的API作为目标方法的参数
具体支持以下类型
HttpServletRequest
HttpServletResponse
HttpSession
java.securiry.Principal
Locale
InputStream
OutputStream
Reader
Writer

9. 处理模型数据

ModelAndView
目标方法的返回值可以使ModelAndView类型,其中可以包含视图和模型信息。
Spring MVC 会把ModelAndView的model中的数据放到Request域对象中。

Map
目标方法可以添加Map类型(实际上也可以是Model类型或ModelMap类型)的参数。

@SessionAttributes
除了使用属性名指定需要放到会话中的属性外(value属性值),还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types属性值)
该注解只能放在类的上面,不能放在方法上面


10. ModelAttribute注解

有@ModelAttribute标记的方法,会在每个目标方法执行之前被Spring MVC 调用!

运行流程
1. 执行@ModelAttribute注解修饰的方法:从数据库中取出对象,把对象放入了Map中,键为:user
2. Spring MVC 从Map中取出User对象,并把表单的请求参数赋给该User对象的对应属性。
3. Spring MVC 把上述对象传入目标方法的参数。

注意:再@ModelAttribute修饰的方法中,放入到Map时的键需要和目标方法入参类型的第一个字母小写的字符串一致!

11. 注解的使用
对类使用的注解
实体对象 @Entity
业务逻辑 @Service
控制器类 @Controller
DAO实现类 @Repository

对方法使用的注解
Junit Unit Test @Test
Spring自动注入的属性 @Autowired

12. Spring project structure
MySQL + Hibernate + Spring MVC Maven

package structure, separate interface and implement
*.*.dao
*.*.dao.impl

*.*.service
*.*.service.impl

*.*.controller
*.*.entities


hibernate config file
hibernate.cfg.xml
*.hbm.xml entity and table mapping file

applicationContext.xml
Spring project major config xml

web.xml
Spring mvc config xml

pom.xml
Maven dependency file xml 用于管理依赖包

普通Spring项目中,applicationContext.xml是主配置文件;
Spring MVC项目中,web.xml是主配置文件,其他配置文件通过它去加载。

Java Bean

指的是一段特殊的Java类,它们
1> 实现了java.io.Serializable interface
2> 提供无参构造器
3> 提供getter setter访问其属性

它定义了一组规则,用来描述组件模型。
用在服务器端,实现业务逻辑、控制逻辑、显示页面的分离。


DispatcherServlet是一个Servlet,Spring将Servlet包装了一层。

test目录的包与main目录的包,如果结构相同,会映射成同一个包。

收刀入鞘吧!凡动刀的,必死在刀下!
原文地址:https://www.cnblogs.com/qiuyi116/p/9008841.html