您现在的位置: 首页 观点 > > 正文
Springboot2
发布时间:2023-04-13 13:18:50 来源:腾讯云

参考:https://www.yuque.com/leifengyang/springboot2


【资料图】

参考:https://www.bilibili.com/video/BV19K4y1L7MT?p=1&vd_source=0c3c1f43c75954a15fba4e42c1d7883e

1. HelloWorld

项目结构

1. pom.xml

    4.0.0    com.example    springboot-test    1.0-SNAPSHOT    pom            springboot-01-hello                org.springframework.boot        spring-boot-starter-parent        2.3.4.RELEASE                            org.springframework.boot            spring-boot-starter-web                        8        8        UTF-8                                            org.springframework.boot                spring-boot-maven-plugin                        

2. MainApplication

package com.example;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * 主程序类 * @SpringBootApplication:这是一个springboot应用 */@SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        SpringApplication.run(MainApplication.class, args);    }}

3. HelloController

package com.example.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController {    @RequestMapping("/hello")    public String home() {        return "Hello world";    }}

4. 启动服务,浏览器访问

2. Springboot特点

2.1 依赖管理

2.1.1 父项目做依赖管理

        org.springframework.boot        spring-boot-starter-parent        2.3.4.RELEASE点进spring-boot-starter-parent看到:    org.springframework.boot    spring-boot-dependencies    2.3.4.RELEASE点进spring-boot-dependencies看到:    几乎声明了所有开发中常用的依赖的版本号

2.1.2 开发导入starter场景启动器

会见到很多spring-boot-starter-*: *就代表某种场景 只要引入starter,这个场景的所有常规需要的依赖我们都自动引入SpringBoot所有支持的场景:https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。 所有场景启动器最底层的依赖
     org.springframework.boot     spring-boot-starter     2.3.4.RELEASE     compile

2.1.3 无需关注版本号,自动版本仲裁

spring-boot-dependencies几乎声明了所有开发中常用的依赖的版本号,引入依赖默认都可以不写版本=>自动版本仲裁

2.1.4 可以修改版本号

引入非版本仲裁的jar,要写版本号查看spring-boot-dependencies里面规定当前依赖的版本用的 key,版本不一致=>在当前项目里面重写配置
    5.1.43

2.2 自动配置

2.2.1 自动配好Tomcat

引入Tomcat依赖
      org.springframework.boot      spring-boot-starter-tomcat      2.3.4.RELEASE      compile
配置Tomcat ???

2.2.2 自动配好SpringMVC

引入SpringMVC全套组件:spring-boot-starter-web引入自动配好SpringMVC常用组件(功能)

2.2.3 自动配好Web常见功能

SpringBoot帮我们配置好了所有web开发的常见场景

dispatcherServlet字符编码:characterEncodingFilter文件上传:multipartResolver

2.2.4 默认的包结构

主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来无需以前的包扫描配置想要改变扫描路径,@SpringBootApplication(scanBasePackages="com.example")或者@ComponentScan 指定扫描路径
@SpringBootApplication等同于@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan("com.example")

2.2.5 各种配置拥有默认值

application.properties:默认配置最终都是映射到某个类上,如:MultipartPropertiesapplication.properties配置文件的值最终会绑定每个类上,这个类会在容器中创建对象

2.2.6 按需加载所有自动配置项

非常多的starter引入了哪些场景这个场景的自动配置才会开启SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面
package com.example;import org.springframework.boot.SpringApplication;import org.springframework.boot.SpringBootConfiguration;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.annotation.ComponentScan;/**@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan("com.example")等价于@SpringBootApplication(scanBasePackages="com.example") 默认扫描主程序所在的包*/@SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        //1、返回我们IOC容器        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);        //2、查看容器里面的组件        String[] names = run.getBeanDefinitionNames();        for (String name : names) {            System.out.println("组件:" + name);        }    }}

3. 自动配置注解

3.1 @Configuration

Full模式与Lite模式项目结构User
package com.example.bean;public class User {    private String name;    private int age;    private Pet pet;    public User() {    }    public User(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public Pet getPet() {        return pet;    }    public void setPet(Pet pet) {        this.pet = pet;    }    @Override    public String toString() {        return "User{" +                "name="" + name + "\"" +                ", age=" + age +                ", pet=" + pet +                "}";    }}
Pet
package com.example.bean;public class Pet {    private String name;    public Pet() {    }    public Pet(String name) {        this.name = name;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public String toString() {        return "Pet{" +                "name="" + name + "\"" +                "}";    }}
MainConfig
package com.example.config;import com.example.bean.Pet;import com.example.bean.User;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration(proxyBeanMethods=true) // 告诉springboot这是一个配置类public class MainConfig {    @Bean    public User userBean(){        User u = new User("zhangsan", 18);        u.setPet(petBean());        return u;    }    @Bean    public Pet petBean(){        Pet p = new Pet("cat");        return p;    }}
MainApplication
package com.example;import com.example.bean.Pet;import com.example.bean.User;import com.example.config.MainConfig;import org.springframework.boot.SpringApplication;import org.springframework.boot.SpringBootConfiguration;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.annotation.ComponentScan;/**@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan("com.example")等价于@SpringBootApplication(scanBasePackages="com.example") 默认扫描主程序所在的包*/@SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        //1、返回我们IOC容器        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);        //2、查看容器里面的组件        String[] names = run.getBeanDefinitionNames();        for (String name : names) {            System.out.println("组件:" + name);        }        // 3. 从容器中获取组件        User user = (User) run.getBean("userBean");        User user2 = (User) run.getBean("userBean");        System.out.println("组件默认是单例的:" + (user==user2));        // 4. 配置类也是组件        MainConfig bean = run.getBean(MainConfig.class);        System.out.println("配置类本身也是组件:" + bean);        // 5. proxyBeanMethods = true, mainConfig就是被增强的代理对象        // springboot总会检查组件是否在容器中存在        // 保持组件单实例        // 外部无论对配置类中的这个组件注册方法调用多少次,获取的都是之前注册容器中的单实例对象        User user3 = bean.userBean();        User user4 = bean.userBean();        System.out.println("主配置是否为代理对象: "+(user3==user4));        // full: proxyBeanMethods=true  => 应用场景: 解决组件依赖        // lite: proxyBeanMethods=false => 配置类在容器中不会保存代理对象,在外边调用方法,每次都会产生一个新对象        // Full: 保证每个@Bean方法被调用多少次返回的组件都是单实例的。类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式        // Lite: 每个@Bean方法被调用多少次返回的组件都是新创建的。类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断        // 组件依赖必须使用Full模式默认。其他默认是否Lite模式        Pet pet = (Pet) run.getBean("petBean");        System.out.println("proxyBeanMethods组件依赖" + (user.getPet()==pet));    }}

3.2 @Bean、@Component、@Controller、@Service、@Repository

项目结构MainConfig
package com.example.config;import com.example.bean.Pet;import com.example.bean.User;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MainConfig {}
User
package com.example.bean;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Component;import javax.annotation.Resource;@Component("userBean")public class User {    private String name;    private int age;    @Autowired    private Pet pet;    public User() {    }    public User(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public Pet getPet() {        return pet;    }    public void setPet(Pet pet) {        this.pet = pet;    }    @Override    public String toString() {        return "User{" +                "name="" + name + "\"" +                ", age=" + age +                ", pet=" + pet +                "}";    }}
Pet
package com.example.bean;import org.springframework.stereotype.Component;@Component("petBean")public class Pet {    private String name;    public Pet() {    }    public Pet(String name) {        this.name = name;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public String toString() {        return "Pet{" +                "name="" + name + "\"" +                "}";    }}
MainApplication
package com.example;import com.example.bean.Pet;import com.example.bean.User;import com.example.config.MainConfig;import org.springframework.boot.SpringApplication;import org.springframework.boot.SpringBootConfiguration;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.annotation.ComponentScan;/** * @SpringBootConfiguration * @EnableAutoConfiguration * @ComponentScan("com.example") 等价于@SpringBootApplication(scanBasePackages="com.example") * 默认扫描主程序所在的包 */@SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        //1、返回我们IOC容器        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);        //2、查看容器里面的组件        String[] names = run.getBeanDefinitionNames();        for (String name : names) {            System.out.println("组件:" + name);        }        // 3. 从容器中获取组件        User user = (User) run.getBean("userBean");        User user2 = (User) run.getBean("userBean");        System.out.println("组件默认是单例的:" + (user == user2));        // 4. 配置类也是组件        MainConfig bean = run.getBean(MainConfig.class);        System.out.println("配置类本身也是组件:" + bean);        // 5. 组件依赖        Pet pet = (Pet) run.getBean("petBean");        System.out.println("组件依赖" + (user.getPet() == pet));    }}

3.3 @Import、@Conditional、@ImportResource、@ConfigurationProperties

@Import:给容器中自动创建出指定类型的组件、默认组件的名字就是全类名

@Conditional:条件装配,满足Conditional指定的条件,则进行组件注入

@ImportResource:原生配置文件引入

@ConfigurationProperties:配置文件中的配置项绑定给组件的属性

项目结构MainApplication
package com.example;import ch.qos.logback.core.db.DBHelper;import com.example.bean.Pet;import com.example.bean.User;import com.example.config.MainConfig;import org.springframework.boot.SpringApplication;import org.springframework.boot.SpringBootConfiguration;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.annotation.ComponentScan;import java.util.Arrays;/** @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan("com.example") 等价于@SpringBootApplication(scanBasePackages="com.example") 默认扫描主程序所在的包 *//** * @Import:给容器中自动创建出指定类型的组件、默认组件的名字就是全类名 * @Conditional:条件装配,满足Conditional指定的条件,则进行组件注入 * @ImportResource:原生配置文件引入 * @ConfigurationProperties:配置文件中的配置项绑定给组件的属性 */@SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        //1、返回我们IOC容器        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);        //2、查看容器里面的组件        String[] names = run.getBeanDefinitionNames();        for (String name : names) {            System.out.println("组件:" + name);        }        // 3. 获取组件        Boolean flag = run.containsBean("petBean");        System.out.println("容器中是否存在petBean组件:" + flag);        Boolean flag2 = run.containsBean("userBean");        System.out.println("容器中是否存在userBean组件:" + flag2);                // 4. 容器中组件数量        System.out.println("组件数量:" + run.getBeanDefinitionCount()); // 167    }}
mainApplication.xml
                                                
User
package com.example.bean;public class User {    private String name;    private int age;    private Pet pet;    public User() {    }    public User(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public Pet getPet() {        return pet;    }    public void setPet(Pet pet) {        this.pet = pet;    }    @Override    public String toString() {        return "User{" +                "name="" + name + "\"" +                ", age=" + age +                ", pet=" + pet +                "}";    }}
Pet
package com.example.bean;public class Pet {    private String name;    public Pet() {    }    public Pet(String name) {        this.name = name;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public String toString() {        return "Pet{" +                "name="" + name + "\"" +                "}";    }}
Car
package com.example.bean;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;// @Component // MainConfig中使用了@EnableConfigurationProperties(Car.class),则不用@Component@ConfigurationProperties(prefix = "car")public class Car {    private String brand;    private double price;    public Car() {    }    public Car(String brand, double price) {        this.brand = brand;        this.price = price;    }    public String getBrand() {        return brand;    }    public void setBrand(String brand) {        this.brand = brand;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    @Override    public String toString() {        return "Car{" +                "brand="" + brand + "\"" +                ", price=" + price +                "}";    }}
MainConfig
package com.example.config;import ch.qos.logback.core.db.DBHelper;import com.example.bean.Car;import com.example.bean.Pet;import com.example.bean.User;import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.*;// @ConditionalOnBean(name="petBean") // 有petBean类里的组件注册才生效,否则都不生效@EnableConfigurationProperties(Car.class)// @EnableConfigurationProperties(Car.class)的作用:// 1. 开启Car配置绑定功能// 2. 把这个Car这个组件自动注册到容器中@ImportResource("classpath:mainApplication.xml")@Import({User.class, DBHelper.class})@Configuration(proxyBeanMethods=true) // 告诉springboot这是一个配置类public class MainConfig {    @ConditionalOnBean(name="petBean") // 容器中存在petBean才执行userBean的组件注册    @Bean    public User userBean(){        User u = new User("zhangsan", 18);        u.setPet(petBean());        return u;    }    // @Bean    public Pet petBean(){        Pet p = new Pet("cat");        return p;    }}

4. 自动配置原理

4.1 引导加载自动配置类

@SpringBootApplication主要组成:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(    excludeFilters = {@Filter(    type = FilterType.CUSTOM,    classes = {TypeExcludeFilter.class}), @Filter(    type = FilterType.CUSTOM,    classes = {AutoConfigurationExcludeFilter.class})})public @interface SpringBootApplication {}

4.1.1 @SpringBootConfiguration

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Configuration // SpringBootConfiguration用来注解 配置类 => MainApplication是一个配置类(核心配置类)public @interface SpringBootConfiguration {    @AliasFor(        annotation = Configuration.class    )    boolean proxyBeanMethods() default true;}

4.1.2 @ComponentScan:包扫描,指定要扫描哪些

两个自定义扫描器

4.1.3 @EnableAutoConfiguration

@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class})public @interface EnableAutoConfiguration {}
@AutoConfigurationPackage
@Import({AutoConfigurationPackages.Registrar.class}) // 给容器中导入一个组件// 指定了默认的包规则public @interface AutoConfigurationPackage {}// 利用Registrar给容器中导入一系列组件// 将指定的MainApplication所在包下的所有组件导入进来
@Import({AutoConfigurationImportSelector.class})
1. 利用getAutoConfigurationEntry(annotationMetadata)给容器中批量导入一些组件2. 调用List configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类3. 利用工厂加载 Map> loadSpringFactories(@Nullable ClassLoader classLoader)得到所有的组件4. 从META-INF/spring.factories位置来加载一个文件。    默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件    spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories    文件里面写死了spring-boot一启动就要给容器中加载的所有配置类

4.2 按需开启自动配置项

spring.factories@Conditional
1. 虽然我们127个场景的所有自动配置启动的时候默认全部加载。    META-INF/spring.factories文件中:xxxxAutoConfiguration2. 按照条件装配规则(@Conditional),最终会按需配置。    eg. @ConditionalOnClass({Gson.class})

4.3 修改默认配置

@Bean@ConditionalOnBean(MultipartResolver.class)  //容器中有这个类型组件@ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字 multipartResolver 的组件public MultipartResolver multipartResolver(MultipartResolver resolver) {    //给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。    //SpringMVC multipartResolver。防止有些用户配置的文件上传解析器不符合规范// Detect if the user has created a MultipartResolver but named it incorrectlyreturn resolver;}

SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先

@Bean@ConditionalOnMissingBeanpublic CharacterEncodingFilter characterEncodingFilter() {}

总结:

SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定生效的配置类就会给容器中装配很多组件(pom.xml配置了)只要容器中有这些组件,相当于这些功能就有了定制化配置用户直接自己@Bean替换底层的组件用户去看这个组件是获取的配置文件什么值就去修改

xxxxxAutoConfiguration ---> 组件 ---> xxxxProperties里面拿值 ----> application.properties

4,4 最佳实践

引入场景依赖https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter查看自动配置了哪些(选做)自己分析,引入场景对应的自动配置一般都生效了配置文件中debug=true开启自动配置报告。Negative(不生效)\Positive(生效)是否需要修改参照文档修改配置项https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties自己分析。xxxxProperties绑定了配置文件的哪些。自定义加入或者替换组件@Bean、@Component。。。自定义器 XXXXXCustomizer;例子resources目录下放一张jpg图片配置文件中添加配置项:
spring.banner.image.location=classpath:timg.jpg

4.5 简化开发

4.5.1 lombok

引入依赖
    org.projectlombok    lombok
idea安装插件使用
@ToString // toString@Data // getter、setter@AllArgsConstructor // 全参构造器@NoArgsConstructor // 无参构造器@Slf4j // 日志
例子
package com.example.bean;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.ToString;@ToString // toString@Data // getter、setter@AllArgsConstructor // 全参构造器@NoArgsConstructor // 无参构造器public class LombokBean {    private String str;    private int i;}
import com.example.bean.LombokBean;import lombok.extern.slf4j.Slf4j;import org.junit.Test;@Slf4jpublic class LombokBeanTest {    @Test    public void testLombokBean(){        LombokBean o = new LombokBean();        o.setStr("abc");        o.setI(10);        System.out.println(o);        log.info(o.toString());    }}

标签:

Springboot2

参考:https: www yuque com leifengyang springboot2

文勇是谁?杭州小伙“150倍高价”买下二手连环画,全网寻人……

文勇是谁?杭州小伙“150倍高价”买下二手连环画,全网寻人……

南京职业技术学院简介刘梦怡视频

1、南京职业技术学院南京航空航天大学,江南大学,南京大学,南京理工大学,南京农业大学,南京师范大学...

原神蒂尔亚什特的赞歌攻略

原神的3 6版本已经开放了,我们会接到全新的开图任务[善恶的赫瓦雷纳]。其中最终的任务叫做[蒂尔亚什特...

港股异动|中集车辆(01839)高开近9% 预期首季归母净利同比增长239%至314%

智通财经获悉,中集车辆(01839)高开近9%,截至发稿,涨8 96%,报6 81港元,成交额105 9万港元。消息面上

含电化学储能、新能源汽车!深圳市征集2023年度科技重大专项备选课题|天天热推荐

4月11日,深圳市科技创新委员会关于征集2023年度科技重大专项备选课题(第一批)的通知。重大专项备选课...

世界聚焦:喊话北京打车太便宜应涨价!乘联会秘书长:燃油车用户纳税但未享受权益

喊话北京打车太便宜应涨价!乘联会秘书长:燃油车用户纳税但未享受权益

焦点速讯:50年潜心研究修建拱桥(讲述·一辈子一件事)

郑皆连(左三)在桥梁施工现场。人物小传郑皆连:1941年生,四川内江人,桥梁工程专家,中国工程院院士、...

尘归尘土归土照片_尘归尘 土归土 全球通讯

1、尘归尘,土归土,让往生者安宁,让在世者重获解脱。2、原文是:ashestoashes,anddustto

外交部发言人回应美军文件泄密事件:美方应当对国际社会作出解释

中国网4月12日讯4月12日,外交部发言人汪文斌主持例行记者会。当日记者会上有记者提问:据美国媒体报道...

环球热资讯!破防了?拜仁球迷请求驱逐曼联曼城老板 年轻一代不选南大王

欧冠1 4决赛首回合焦点战,拜仁在伊蒂哈德球场经历了一场0-3的惨败,虽然次回合将回到“安联屠宰场”,...

【焦点热闻】慢性胃炎吃蜂蜜养胃吗_喝蜂蜜对慢性胃炎有好处吗

1、喝蜂蜜对慢性胃炎有一定的好处。蜂蜜中含有35%的葡萄糖和40%的果糖,可以被人体吸收,在胃中起到营养...

最新消息:iPhone 15系列的颠覆性设计没了,果子因技术不行放弃

然而就在今天,知名分析师郭明錤今天在社交平台透露,由于量产前无法克服技术问题,苹果两款高端iPhone1...

重庆植发正规医院排名 雍禾 新生均上榜

割双眼皮现在是大势所趋,因为割了双眼皮之后,眼睛会变得非常的有神,也会变得非常的好看,而且恢复期...

乘联会:4月1日至9日乘用车市场零售32.8万辆 同比增长47%

4月1-9日,乘用车新能源车市场零售9 1万辆,同比去年同期下降8%,较上月同期下降5%。今年以来累计零售1...

【报资讯】新蔡县公安局开展打击防范电信诈骗宣传活动

大象新闻记者黄向阳实习生马彬通讯员李青山为提高辖区群众对电信诈骗的认识,增强群众防骗意识和能力,...

国家能源局:今年我国全国电力供应总体有保障 世界微动态

国家能源局综合司司长、新闻发言人梁昌新12日在新闻发布会上回答媒体提问时表示,预计今年全国最大电力...

上海人注意:本该离开的浮尘又不走了,“罪魁祸首”是它!“吃土”状态将持续到…… 当前视讯

昨晚浮尘天气来袭全上海开启雾蒙蒙模式昨天晚间九点实时空气质量指数已达500系严重污染首要污染物为PM10...

建设银行:深化新金融行动,为激发经济发展新活力注入强信心-每日快播

建设银行2022年度经营业绩显示,该行依托新金融行动,资产质量稳中向好,服务实体经济质效提升,为在新...

卓创资讯涂镀观察:新高过后 基本面助力行情蓄势待发|当前焦点

涂镀观察:新高过后基本面助力行情蓄势待发卓创资讯毕红兵【导语】一季度镀锌板卷上涨近三百,创年内新...

全球观速讯丨倒档怎么挂档_倒档

1、楼上糊说,他是没开过车,才说出这些话来。2、车在向前快速行驶中挂倒档时,轻则发出齿轮碰撞的声音...

问道法宝技能怎么升级 法宝技能升级方法介绍

问道法宝技能怎么升级呢?法宝技能即法宝特技,包括亲密无间、天眼、翻转乾坤、金刚圈、嘲讽和物极必反...

天天热头条丨新湖期货4月12日有色信息早报

4月12日消息,秘鲁2月份的铜产量较1月份下降3 2%。2月锌产量较1月增长11%。

全球球精选!浙江省温州市茶山文旅消费季暨大学生创业营销大赛活动热烈开幕!

近日,“2023‘瓯海农商银行杯’茶山文旅消费季暨大学生创业营销大赛活动”在浙江省温州市极地海洋馆热...

国内游市场亮点迭出:多地客流量大增 网红城市频“出圈”

本报记者尹婕《人民日报海外版》(2023年04月12日第12版)近期,随着气温升高,出门旅游的人逐渐增多,...

最资讯丨(聚焦消博会)第三届消博会主宾国意大利国家馆开馆

长沙初中教学工作计划(汇总3篇)

世界要闻:每年可绿色发电16亿千瓦时!浙江最大海上风电项目全线开工

南华仪器: 董事会关于对2022年度业绩预告修正的说明

每日讯息!(聚焦消博会)德勤:中国消费市场复苏步调有望加快

龙响天下叶小龙(龙响)

天天观察:车联网专用物联网卡与手机卡一样吗?对于车载GPS有什么作用?

送女孩的生日礼物_新视野

2007gdp增速_2007年我国gdp增长率为

《资本运作与公司治理》一书出版发行

男子大骂剖腹产妻子3小时!产房是生死门,也是人性的照妖镜

环球快看:2023年河南高考300分一400分专科公办学校名单

dnf雷克斯暴龙

世界讯息:386旅_38 6

世界快资讯:太康县召开全县学校安全工作会议

威海广泰:空港装备全面进入欧洲市场,海外业务增速亮眼,连续13年派现,北向资金持续加仓|全球聚看点

每日播报!关于恢复办理人行道违停处理有关业务的通告

走过 3 座桥、跟随 5 公里!他们救下一条命 ...

医药行业2023年4月投资月报:看好创新药和中药行情 全球头条

当前快播:即将投用!烟台市区新添多所小学、幼儿园

电脑屏幕一直换图片怎么取消(怎么取消电脑屏幕自动换图片)

怎么做能去除痘印?去痘印不妨试试这两个小偏方

招远市金潮电池有限公司_世界时讯

无法加载activex控件错误0xf0000006_无法加载activex控件 今日视点

当前短讯!第八届中国国际“互联网+”大学生创新创业大赛冠军争夺赛圆满收官

信息:海通国际:给予农业银行增持评级,目标价位3.98元

不开放“考前踩点”,广东这项考试将于4月15日、16日举行

友达光电一季度合并营收115.5亿元 同期相比减少37.2%

今日播报!越媒:越南房地产市场流动性连续数月触底 行业失业率持续上升

纪念币兑换日期内哪天都可以吗?公积金的特性? 全球观察

共和国的脊梁——科学大师名校宣传工程 天津大学大型原创话剧《侯德榜》 观天下

全球新消息丨使用MinIO Operator安装minio集群并配置为kubernetes的storageClass

中国华电:柬埔寨西港2×35万千瓦燃煤电站项目转入商业运行

恶搞蛋糕送男生 通讯

世界今日讯!大陆高铁没靠背?台中交通局前局长“无脑”言论被嘲

【世界报资讯】【东海期货4月10日产业链日报】贵金属篇:非农喜忧参半,金银震荡

2023汉中事业单位招聘职位表下载(教师类525人)

关注:候鸟春归乌苏里江

主板注册制首批10家企业亮相:资本赋能打造行业龙头 当前快讯

全球观焦点:景观艺术设计_对于景观艺术设计简单介绍

世界新资讯:相信我们会创造奇迹歌曲歌词_求歌词 相信我们会创造奇迹歌词

“双季稻+冬小麦”种植模式 提高土地利用率 提升粮食产能 全球看点

中金岭南: 董事会决议公告-环球最资讯

每日热文:广西破获特大偷渡案:以境外高薪招聘为诱饵,69人已获刑

醉驾吊销后驾照会吊销吗

正式开票!下周去现场为中国队加油!

安切洛蒂:丢三球因队伍失去平衡 失利不会影响对阵切尔西的士气 环球报道

就业服务驿站成为群众家门口的“就业加油站”

“数字人”虚实共生、“跨时空”视听多维、传统文化“数字永生”——数字媒体如何丰富人类视听体验? 全球热文

《无间》花向雨被折磨致死,遗书曝光佛手真实身份,竟是他|天天热议

x 广告
x 广告

Copyright ©  2015-2022 华中自然网版权所有  备案号:京ICP备12018864号-26   联系邮箱:2 913 236 @qq.com