springBoot01——基本认识

1. 简介

        Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品。无需开发重量级的 Enterprise JavaBean(EJB),Spring 为企业级Java 开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java 对象(Plain Old Java Object,POJO)实现了 EJB 的功能。
        虽然 Spring 的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring 用 XML 配置,而且是很多 XML 配置。Spring 2.5 引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式 XML 配置。Spring 3.0 引入了基于 Java 的配置,这是一种类型安全的可重构配置方式,可以代替 XML。所有这些配置都代表了开发时的损耗。因为在思考 Spring 特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻辑的时间。和所有框架一样,Spring 实用,但与此同时它要求的回报也不少。
        除此之外,项目的依赖管理也是件吃力不讨好的事情。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这难题实在太棘手。并且,依赖管理也是一种损耗,添加依赖不是写应用程序代码。一旦选错了依赖的版本,随之而来的不兼容问题毫无疑问会是生产力杀手。
Spring Boot 让这一切成为了过去。
        Spring Boot 是 Spring 社区较新的一个项目。该项目的目的是帮助开发者更容易的创建基于 Spring 的应用程序和服务,让更多人的人更快的对 Spring 进行入门体验,为 Spring 生态系统提供了一种固定的、约定优于配置风格的框架。

1.1 springBoot的特性

1)为基于 Spring 的开发提供更快的入门体验
2)开箱即用,没有代码生成,也无需 XML 配置。同时也可以修改默认值来满足特定的需求。
3)提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。
4)Spring Boot 并不是不对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。

2. springBoot的启动依赖

boot工程区别于我们之前是SSM工程,它需要一个启动依赖,配置如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
  </parent>  
  <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>

spring-boot-starter-parent:就是父依赖,我们的boot项目必须继承自这个父依赖才能使用启动器。

启动器:启动器就是可以让使用者可以快速添加依赖的工程

web项目启动器:spring-boot-starter-web

如图,添加好启动依赖之后,工程中自动添加了以下这么多的jar包

3. 变更JDK版本

maven项目默认的JDK版本是1.5,boot的默认版本是1.6,我们要是想更改jdk的版本了,该怎么做了?在boot中有两种方式,一种是跟之前一样添加插件,还有一种就是使用properties属性标签来配置,例如:

  <properties>   
    <java.version>1.7</java.version>
  </properties>

4. 引导类

        boot项目不需要web容器(tomcat),是因为其内置了web容器的,但是,既然没有容器,我们需要有入口来运行我们的程序,在boot中是通过引导类(启动类)来完成的,该类是整个应用的一个入口。

扫描二维码关注公众号,回复: 9334681 查看本文章

        该类用注解@SpringBootApplication来标识,main函数就是应用的入口。在main函数中通过执行静态类SpringApplication的run方法来启动应用程序,例如:

package com.bjc.boot.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}

注意:@SpringBootApplication其实就是以下三个注解的总和
1)@Configuration: 用于定义一个配置类
2)@EnableAutoConfiguration :Spring Boot会自动根据你jar包的依赖来自动配置项目。该配置很重要,会让工程的所有配置都按照默认配置来运行,这样我们就可以更多的关注业务代码本身了,当然,如果默认配置不能满足我们的需求的时候,我们可以通过属性文件来修改配置。
3)@ComponentScan: 告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。所以,引导内一般位于根包下,这样可以扫描更多的类。
在引导类中,我们还可以配置一些javabean配置对象。

5. Demo开发

经过以上的配置,已经可以做boot的开发了,我们实现一个Hello world的程序

1)控制层

package com.bjc.boot.demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/boot")
public class HelloController {
	
	@RequestMapping("/hello")
	public String hello(){
		return "hellow world!";
	}
}

测试:

6. 读取配置文件

在boot中,要读取properties文件中的key和value相当简单

例如:在application.properties定义url

在代码中只需要使用如下代码即可

测试结果如图;

7. 热部署依赖

        我们在开发中反复修改类、页面等资源,每次修改后都是需要重新启动才生效,这样每次启动都很麻烦,浪费了大量的时间,能不能在我修改代码后不重启就能生效呢?可以,在pom.xml中添加如下配置就可以实现这样的功能,我们称之为热部署

<dependency>  
	<groupId>org.springframework.boot</groupId>  
	<artifactId>spring-boot-devtools</artifactId>  
</dependency> 

8. SpringBoot与ActiveMQ整合

8.1 启动器

<!-- 添加activeMQ依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

8.2 使用内置的ActiveMQ

使用你内置的ActiveMQ很简单,直接引入jmsMessagingTemplate就可以使用了,无需配置文件

8.2.1 生产者

package com.bjc.boot.demo;

import javax.annotation.Resource;

import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/producer")
public class QueueProducer {

	@Resource
	private JmsMessagingTemplate jmsMessagingTemplate;
	
	@RequestMapping("/send")
	public void sendMesg(String text){
		jmsMessagingTemplate.convertAndSend("bjc", text);
	}
	
}

直接调用jmsMessagingTemplate的convertAndSend方法即可发送消息了,第一个参数是消息名称,第二个参数是消息内容

8.2.2 消费者

package com.bjc.boot.demo;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

@Component
public class QueueConsumer {
	
	@JmsListener(destination = "bjc")
	public void receive(String text){
		System.out.println("接收到的消息是:" + text);
	}
}

消费者也很简单,无需我们单独写监听器了,也不需要配置文件了,直接用注解@JmsListener,属性值为消息的名称,定义的接收方法的参数就是消息。

8.3 使用外部服务

使用外部服务也超级简单,只需要在src/main/resources下的application.properties增加配置, 指定ActiveMQ的地址

例如:

spring.activemq.broker-url=tcp://192.168.25.130:61616

这样配置就好了

8.4 发送Map信息

和发送文本消息方式一样,不同的是,在监听方法的参数上要写Map类型的形参数

8.4.1 生产者

@RequestMapping("/sendMap")
public void sendMapMesg(){
	Map map = new HashMap();
	map.put("name", "张三");
	map.put("age", 22);
	map.put("birth", "2019-01-02");
	jmsMessagingTemplate.convertAndSend("bjcMap", map);
}

8.4.2 消费者

@JmsListener(destination = "bjcMap")
public void receiveMap(Map map){
	System.out.println("接收到的消息是:" + map);
}

我们发现使用boot整合activeMQ只需要注意三个地方就可以了

1)生产者发送的消息名称与消费者监听注解的名称要一致

2)消费者的监听方法要加注解@JmsListener

3)消费者监听方法的参数类型与消息类型要一致

发布了205 篇原创文章 · 获赞 9 · 访问量 7941

猜你喜欢

转载自blog.csdn.net/weixin_43318134/article/details/104282487
今日推荐