南阳市建设局网站,网站缺点,商城网站建设源码,杭州制作网站个人要想全面快速学习Spring的内容#xff0c;最好的方法肯定是先去Spring官网去查阅文档#xff0c;在Spring官网中找到了适合新手了解的官网Guides#xff0c;一共68篇#xff0c;打算全部过一遍#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…要想全面快速学习Spring的内容最好的方法肯定是先去Spring官网去查阅文档在Spring官网中找到了适合新手了解的官网Guides一共68篇打算全部过一遍能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的guide10接着往下看。
guide11、Managing Transactions
主要讲了非侵入式事务操作数据库的方法也就是使用注解Transactional。
Guide涉及注解
Transactional:
Spring提供了很好事务管理机制主要分为编程式事务和声明式事务两种。
编程式事务是指在代码中手动的管理事务的提交、回滚等操作代码侵入性比较强.
声明式事务是基于AOP面向切面的它将具体业务与事务处理部分解耦代码侵入性很低所以在实际开发中声明式事务用的比较多。声明式事务也有两种实现方式一是基于TX和AOP的xml配置文件方式二种就是基于Transactional注解了。
可以作用在接口、类、类方法
作用于类, 表示所有该类的public方法都配置相同的事务属性信息。作用于方法当类配置了Transactional方法也配置了Transactional方法的事务会覆盖类的事务配置信息。作用于接口不推荐这种使用方法因为这只有在使用基于接口的代理时它才会生效。 也要注意下注解失效场景
Transactional 应用在非 public 修饰的方法上Transactional 注解属性 rollbackFor 设置错误或者异常被 catch“吃了”导致Transactional失效同一个类中方法调用导致Transactional失效 guide12、Accessing Data with MongoDB
主要讲的是MongoDB的简单使用将数据存储在基于文档的数据库MangoDB并从中检索数据。
Spring Data MongoDB 专注于在 MongoDB 中存储数据。它还继承了 Spring Data Commons 项目的功能例如派生查询的能力
NoRepositoryBean
public interface MongoRepositoryT, ID extends ListCrudRepositoryT, ID, ListPagingAndSortingRepositoryT, ID, QueryByExampleExecutorT {S extends T S insert(S entity);S extends T ListS insert(IterableS entities);S extends T ListS findAll(ExampleS example);S extends T ListS findAll(ExampleS example, Sort sort);
}在自己项目中可以扩展该类MongoRepository去实现自定义的CURD方法。
与mysql对比: https://www.modb.pro/db/73742 涉及注解
Id标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前可与声明语句同行也可写在单独行上。 guide13、Converting a Spring Boot JAR Application to a WAR
Spring Boot 的的插件
spring-boot-gradle-pluginspring-boot-maven-plugin
本质上具有相同的功能都可以去打jar包或者war包。
jar包和war包的区别简单理解jar包是java打的包war包可以理解为javaweb打的包。
jar包中只是用java来写的项目打包来的里面只有编译后的class和一些部署文件。
而war包里面的东西就全了包括写的代码编译成的class文件依赖的包配置文件所有的网站页面包括htmljsp等等。一个war包可以理解为是一个web项目里面是项目的所有东西。 guide14、Handling Form Submission
主要讲的是使用 Spring 创建和提交 Web 表单的过程。
涉及到前端Thymeleaf的表单提交编写。
Guide涉及注解 ModelAttribute: 将方法参数或方法返回值绑定到命名的模型属性然后将其暴露给 Web 视图。 PostMapping(/greeting)public String greetingSubmit(ModelAttribute Greeting greeting, Model model) {model.addAttribute(greeting, greeting);return result;}在控制器中数据会存放到Model对象中当需要生成HTML的时候模板引擎会根据名字来定位数据。
从广义上来说Model指的是MVC中的M即Model(模型)。从狭义上讲Model就是个key-value集合。实际上上图方法得到的model对象就是一个 java.util.Map 你可以将Model类型替换为MapString, Object 或者ModelMap——一个实现了Model接口的java.util.HashMap。 guide15、Using WebSocket to build an interactive web application
主要讲的是使用websocket来构建一个交互应用。
涉及到前后端项目内首先要在pom内引入websocket、stomp相关的依赖。
其次Controller类的实现与restful服务不同如下 Controllerpublic class GreetingController {MessageMapping(/hello)SendTo(/topic/greetings)public Greeting greeting(HelloMessage message) throws Exception {Thread.sleep(1000); // simulated delayreturn new Greeting(Hello, HtmlUtils.htmlEscape(message.getName()) !);}
}涉及注解 MessageMapping用来接收指定路径发送来的message将messgae映射到消息处理的方法类似于requestMapping的作用。 SendTo该注解意味着方法的返回值转为message,并且发送到指定的目的地。
还需要进行websocket的配置通过实现WebSocketMessageBrokerConfigurer类重写configureMessageBroker方法来进行消息配置。它首先调用以enableSimpleBroker()启用一个简单的基于内存的消息代理以将问候消息传送回前缀为/topic. 它还为绑定/app到带有注释的方法的消息指定前缀MessageMapping。此前缀将用于定义所有消息映射。例如是方法映射到处理的/app/hello端点。
registerStompEndpoints()方法注册/gs-guide-websocket端点并启用 SockJS 回退选项以便在WebSocket 不可用时可以使用备用传输。SockJS 客户端将尝试连接/gs-guide-websocket并使用最佳可用传输。 EnableWebSocketMessageBroker将此注释添加到一个Configuration类以使用更高级别的消息传递子协议通过 WebSocket 启用代理支持的消息传递。 Configuration
EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {Overridepublic void configureMessageBroker(MessageBrokerRegistry config) {config.enableSimpleBroker(/topic);config.setApplicationDestinationPrefixes(/app);}Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {registry.addEndpoint(/gs-guide-websocket).withSockJS();}}除此之外还需要javascript客户端进行消息发送和从服务端接受返回消息。
var stompClient null;function setConnected(connected) {$(#connect).prop(disabled, connected);$(#disconnect).prop(disabled, !connected);if (connected) {$(#conversation).show();}else {$(#conversation).hide();}$(#greetings).html();
}function connect() {var socket new SockJS(/gs-guide-websocket);stompClient Stomp.over(socket);stompClient.connect({}, function (frame) {setConnected(true);console.log(Connected: frame);stompClient.subscribe(/topic/greetings, function (greeting) {showGreeting(JSON.parse(greeting.body).content);});});
}function disconnect() {if (stompClient ! null) {stompClient.disconnect();}setConnected(false);console.log(Disconnected);
}function sendName() {stompClient.send(/app/hello, {}, JSON.stringify({name: $(#name).val()}));
}function showGreeting(message) {$(#greetings).append(trtd message /td/tr);
}$(function () {$(form).on(submit, function (e) {e.preventDefault();});$( #connect ).click(function() { connect(); });$( #disconnect ).click(function() { disconnect(); });$( #send ).click(function() { sendName(); });
});这个 JavaScript 文件中要理解的主要部分是connect()和sendName()函数。
该connect()函数使用SockJS和stomp.js打开与 的连接/gs-guide-websocket这是我们的 SockJS 服务器等待连接的地方。连接成功后客户端订阅目的地/topic/greetings服务器将在目的地发布问候消息。当在该目的地收到问候语时它将向 DOM 附加一个段落元素以显示问候语消息。
该sendName()函数检索用户输入的名称并使用 STOMP 客户端将其发送到目的地/app/helloGreetingController.greeting()将在何处接收。
实际演示下先连接服务端并输入名字会将名字发送到服务端。服务端会返回消息并显示。 STOMP即Simple Text Orientated Messaging Protocol简单(流)文本定向消息协议它提供了一个可互操作的连接格式允许STOMP客户端与任意STOMP消息代理Broker进行交互。STOMP协议由于设计简单易于开发客户端因此在多种语言和多种平台上得到广泛地应用。https://en.wikipedia.org/wiki/Streaming_Text_Oriented_Messaging_Protocol