第六章 :Spring Boot web开发常用注解(一)
第六章 :Spring Boot web开发常用注解(一)
前言
本章节知识重点:作者结合自身开发经验,以及觉察到的一个现象:
Springboot注解全面理解和掌握的并不多
,对注解进行了全面总结,共分两个章节,可以作为web开发工程师注解参考手册。本章节内容包含:启动类注解,组件注解,实例与生命周期相关注解,SpringMVC相关注解。
web应用开发常用注解概览
作者整理了一张SpringBoot常用注解的思维导图,共分两个章节讲解这些注解的用法。
启动类注解
(1)@SpringBootApplication
作用:这是一个组合注解,包括了@Configuration、@EnableAutoConfiguration和@ComponentScan三个注解。
@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
(2)@Configuration
@Configuration
注解用于定义配置类,可以替换 XML 配置文件。被注解的类内部包含有一个或多个被 @Bean
注解的方法,这些方法会被 AnnotationConfigApplicationContext
或 AnnotationConfigWebApplicationContext
类进行扫描,并用于构建 bean 定义,初始化 Spring 容器。
@Configuration
public class AppConfig { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mydb"); dataSource.setUsername("username"); dataSource.setPassword("password"); return dataSource; }
}
(3)@ConfigurationProperties
@ConfigurationProperties
注解用于将配置文件中的属性值注入到一个 Java Bean 中,通常用于将应用程序的配置属性注入到 Java 对象中。它可以将属性对象注册到 Spring 容器中,并与其他 Spring 注解(如 @Autowired
)一起使用,实现更加灵活和可配置化的功能。
@Configuration
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfig { private String username; private String password; private int timeout; // getter and setter methods
}
@ConfigurationProperties
注解的 prefix
属性指定了配置文件中的属性前缀为 myapp
,因此 username
、password
和 timeout
这三个属性值会从配置文件中读取 myapp.username
、myapp.password
和 myapp.timeout
属性的值。
注意
使用
@ConfigurationProperties
注解时需要在 Spring Boot 主类或配置类上添加@EnableConfigurationProperties
注解,以激活该注解的功能。
(4)@EnableAutoConfiguration
@EnableAutoConfiguration
注解用于开启自动配置功能,可以自动配置符合条件的 @Configuration
配置,并将它们加载到 Spring Boot 创建并使用的 IoC 容器中。
@SpringBootApplication
@EnableAutoConfiguration
public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); }
}
@EnableAutoConfiguration
注解被添加到 MyApp
类中,该类还包含了 @SpringBootApplication
注解。这个注解组合实现了自动配置和应用程序启动的功能。
注意
@EnableAutoConfiguration
注解会根据类路径和其他条件自动判断并加载符合条件的配置类,因此开发者不需要手动添加或配置这些配置类。此外,还可以通过spring.factories
文件来自定义自动配置的类和条件,以满足更加灵活和个性化的需求。
(5)@ComponentScan
@ComponentScan
注解用于自动扫描和注册容器中的组件。使用 @ComponentScan
注解可以告诉 Spring 在指定的包或类路径下进行组件扫描,然后自动将被扫描到的组件注册到 Spring 容器中。
@Configuration
@ComponentScan(basePackages = {"com.example.package"})
public class AppConfig { // 其他配置
}
Spring Boot 会扫描 com.example.package
包以及其子包中的组件,并将它们注册到 Spring 容器中。
注意
@ComponentScan
可以和 Spring Boot 的自动配置功能一起使用,以实现更加灵活和可配置化的功能。
(6)@PropertySources 与@PropertySource
@PropertySources 和 @PropertySource 注解在 Spring 框架中用于加载外部的属性文件,并将文件中的属性值注入到 Spring 容器中的对象。
@PropertySources 注解可以包含多个 @PropertySource 注解,每个 @PropertySource 指定一个属性文件,用于存储配置信息。
@Configuration
@PropertySources({ @PropertySource("classpath:config1.properties"), @PropertySource("classpath:config2.properties")
})
public class AppConfig { // 其他配置
}
组件注解
(7)@Component
作用:
- 自动扫描和实例化bean:通过@Component注解,Spring Boot会自动扫描带有该注解的类,并将其实例化为Spring容器中的bean。这使得这些类可以在Spring应用程序中使用,并可以通过依赖注入等方式进行配置和使用。
- 提供自定义命名:通过在@Component注解中指定value属性,可以为组件指定一个自定义的名称。这有助于在注入时使用指定的名称来引用该组件,而不是使用其默认的类名。
@Component
public class MyComponent { // 类的定义和逻辑
}
注意
@Component注解可以用于任何普通的Java类,包括服务、仓库、控制器等。它是其他特定用途注解(如@Service、@Repository、@Controller等)的基础注解。
(8)@Service
作用:注解用于标记一个类为服务层组件,通常用于实现业务逻辑和封装数据访问等操作。被@Service注解标记的类将被Spring框架自动注册为Spring容器中的Bean,并且可以通过依赖注入的方式在其他组件中使用。
@Service
public class MyService { @Autowired private MyRepository myRepository; public MyEntity getEntityById(Long id) { return myRepository.findById(id).orElse(null); } // 其他业务逻辑方法...
}
(9)@Repository
作用:注解用于标记一个类为数据访问对象(DAO),通常用于访问数据库。被@Repository注解标记的类将作为DAO层组件,主要作用是封装对数据库的访问操作。
以下是一个使用@Repository注解的示例:
@Repository
public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username);
}
注意
@Repository注解还可以用于标记实现类为DAO层组件,例如:
@Repository
public class UserRepositoryImpl implements UserRepository { // 实现UserRepository接口中的方法...
}
(10)@Controller
作用:注解用于标记一个类为控制器层组件,通常用于处理HTTP请求并返回HTTP响应。被@Controller注解标记的类将作为控制器层组件,主要作用是接收客户端发送的请求,并根据请求参数和业务逻辑生成相应的响应。
以下是一个使用@Controller注解的示例:
@Controller
@RequestMapping("/users")
public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public ResponseEntity<User> getUserById(@PathVariable Long id) { User user = userService.getUserById(id); return ResponseEntity.ok(user); } // 其他处理请求的方法...
}
(11)@RestController
作用:注解用于标记一个类或方法,表示该类或方法用于处理HTTP请求,并将响应的结果直接返回给客户端,不需要进行视图渲染
。
以下是一个使用@RestController注解的示例:
@RestController
@RequestMapping("/hello")
public class HelloController { @GetMapping public String sayHello() { return "Hello World!"; }
}
注意
使用@RestController注解时,方法返回值默认会被转换成JSON格式,并通过HTTP响应返回给客户端。如果需要返回其他格式的数据,可以使用其他注解,比如@ResponseBody注解或者使用特定的视图解析器来渲染视图。
简化代码注解
(12)@Data
作用: 注解是Lombok库提供的一个注解,Lombok会自动生成这些方法,无需手动编写。这可以减少模板代码的编写量,提高代码的可读性和可维护性。它用于简化代码,提高开发效率。@Data注解的主要作用是自动生成一些常用的方法,如getters、setters、equals、hashCode和toString等。
以下是一个使用@Data注解的示例:
import lombok.Data;
@Data
public class User { private String name; private int age;
}
依赖注入注解
(13)@Autowired
作用:注解是一个核心功能,它用于实现Spring的依赖注入功能。依赖注入是指将一个对象的依赖项(也称为Bean)注入到另一个对象中,从而消除了显式的依赖关系创建。通过使用@Autowired注解,Spring容器会在启动时自动查找并装配标记了该注解的Bean对象。
@Autowired注解可以用于类成员变量、方法及构造函数,它默认是按照类去匹配Bean,也可以配合@Qualifier注解按照名称去装配Bean。
以下是一个使用@Autowired注解的示例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component
public class MyComponent { private MyService myService; @Autowired public MyComponent(MyService myService) { this.myService = myService; } // 其他方法...
}
(14)@Resource
作用:注解用于依赖注入,和@Autowired注解类似,用于自动装配Spring容器中的Bean之间的依赖关系。
@Resource注解可以用于类中的字段或setter方法,使Spring容器自动装配相应的依赖项。它提供了更多的配置选项,可以通过name属性指定要注入的bean名称,也可以通过type属性指定需要注入的bean类型。
@Resource注解是由Java EE规范定义的,因此使用它可以增加代码的可移植性,使代码可以在其他Java EE应用服务器中重用。
以下是一个使用@Resource注解的示例:
import javax.annotation.Resource;
import org.springframework.stereotype.Component; @Component
public class MyComponent { @Resource(name="myBean") private MyService myService; // 其他方法...
}
(15)@Qualifier
Spring Boot中的@Qualifier注解是Spring框架中用于注入Bean的注解。它通常与@Autowired或@Inject注解一起使用,用于指定需要注入的Bean的名称。当容器中有多个类型相同的Bean时,可以使用@Qualifier注解来指定需要注入的Bean。
@Qualifier注解可以用于字段、方法参数、构造函数参数等位置。
以下是一个使用@Qualifier注解的示例:
@Service
public class UserService { @Autowired @Qualifier("userRepositoryImpl") private UserRepository userRepository; public User getUserById(Long id) { return userRepository.findById(id).orElse(null); } // Other business methods...
}
(16)@Value
作用:注解用于将属性值注入到Spring管理的对象中。通过在字段、方法参数或构造函数参数上使用@Value注解,可以将配置文件中的属性值或其他动态计算的值注入到应用程序中。这样可以将配置信息与代码分离,提高了代码的可维护性和灵活性。
以下是一个使用@Value注解的示例:
@Value("${test.array1}") private String[] testArray1;
@Value("${test.array2}") private int[] testArray2;
@Value("${test.array3}") private double[] testArray3;
(17)@Bean
作用:注解用于定义一个JavaBean,并将其注册到Spring容器中。使用@Bean注解可以方便地将普通的Java类转换为Spring容器中的Bean,并由Spring容器负责实例化、配置和管理。
@Bean注解可以用于类或方法上,通常用于在类中定义一个方法,该方法的返回值是一个JavaBean对象,并由Spring容器负责实例化、配置和管理。
以下是一个使用@Bean注解的示例:
@Configuration
public class AppConfig { @Bean public UserService userService() { return new UserServiceImpl(); }
}
注意
使用@Bean注解定义的方法不应该有任何参数,否则会报错。同时,如果该方法有返回值,则返回值应该是一个JavaBean对象,否则也会报错。
实例与生命周期相关注解
(17)@PostConstruct
作用:注解用于在依赖注入完成后自动调用一个初始化方法。该注解可以用于类中的非静态方法上,且该方法会在服务器加载Servlet时执行一次。
注意
使用@PostConstruct注解时,该注解的方法在整个Bean初始化中的执行顺序为:Constructor -> @Autowired -> @PostConstruct。
以下是一个使用@PostConstruct注解的示例:
@Component
public class MyBean { @PostConstruct public void init() { // 在依赖注入完成后执行的初始化操作 }
}
(17)@PreDestroy
作用:注解用于在Bean销毁之前执行一个方法。当Bean被销毁时,容器会自动调用被@PreDestroy注解标注的方法。
@PreDestroy注解只能用于方法上,且该方法不能有参数。它可以用于任何Bean中,包括单例Bean和原型Bean。
以下是一个使用@PreDestroy注解的示例:
@Component
public class MyBean { @PreDestroy public void destroy() { // 在Bean销毁之前执行的代码 }
}
(17)@Scope
作用:注解用于配置Spring Bean的作用域。它主要定义了Bean的作用范围是单实例还是多实例,可以控制Bean的生命周期。
@Scope注解可以作用于类和方法,通过属性来控制作用域。其作用范围包括singleton、prototype、request、session、globalSession,以及其他的自定义范围。
以下是一个使用@Scope注解的示例:
@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class Service { // ...
}
SpringMVC相关注解
(18)@RequestMapping
作用:用于将HTTP请求映射到特定的处理方法上。
@RequestMapping注解可以用在类或方法上,用于定义URL和HTTP请求方法与处理方法的映射关系。
以下是一个使用@RequestMapping注解的示例:
@RestController
@RequestMapping("/api")
public class MyController { @GetMapping("/hello") public String hello() { return "Hello World!"; }
}
(19)@RequestParam
作用:将请求参数绑定到方法的参数上。在Spring MVC框架中,当浏览器向服务器发起请求时,请求中可能会包含一些参数,例如查询字符串或表单数据。使用@RequestParam注解可以将这些请求参数的值映射到控制器方法的参数上,从而方便地获取和使用这些参数。
@RequestParam注解有以下属性:
- value:请求参数的名称。如果请求参数的名称与方法参数的名称相同,则该属性可以省略。
- required:指定请求参数是否是必需的,默认为true。如果设置为false,则表示该参数是可选的。
- defaultValue:指定当请求参数未提供时使用的默认值。
以下是一个使用@RequestParam注解的示例:
@RequestMapping("/hello")
public String hello(@RequestParam("name") String name, @RequestParam(value="age", required=false, defaultValue="0") int age){ System.out.println("Hello "+name+", you are "+age+" years old."); return "hello";
}
(20)@ResponseBody
作用:将Controller的方法返回的对象,通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
@ResponseBody注解可以将控制器方法的返回值直接写入到HTTP响应的body中,而不需要经过视图解析器的处理。
以下是一个使用@ResponseBody注解的示例:
@RestController
@RequestMapping("/api")
public class MyController { @GetMapping("/data") public @ResponseBody DataResponse getData() { DataResponse response = new DataResponse(); response.setId(1); response.setName("John"); return response; }
}
(21)@PathVariable
作用:是将URL路径中的占位符参数绑定到控制器方法的参数上。通过使用@PathVariable注解,控制器方法可以接收URL路径中的参数作为输入,以便根据不同的参数值执行相应的操作。
以下是一个使用@PathVariable注解的示例:
@RestController
@RequestMapping("/users/{id}")
public class UserController { @GetMapping("/info") public String getUserInfo(@PathVariable Long id) { // 获取用户信息并返回 return "User info for user with ID " + id; }
}
(22)@GetMapping
作用:处理HTTP GET请求映射到特定的处理方法(Controller方法)。当你希望从服务器获取某些资源或数据时,通常会使用GET请求,适用于获取数据、查看页面等不会产生副作用的操作。
以下是一个使用@GetMapping注解的示例:
@RestController
@RequestMapping("/users")
public class UserController { @GetMapping("/{id}") public String getUserInfo(@PathVariable Long id) { // 根据用户ID获取用户信息并返回 return "User info for user with ID " + id; }
}
(23)@PostMapping
@PostMapping注解是Spring Boot中用来声明POST请求处理方法的注解。它的作用是将HTTP POST请求映射到特定的处理方法(Controller方法),并自动将请求体中的数据转换为Java对象。
以下是一个使用@PostMapping注解的示例:
@RestController
@RequestMapping("/users")
public class UserController { @PostMapping("/add") public String addUser(@RequestBody User user) { // 处理添加用户的逻辑,并返回结果 return "User added successfully!"; }
}
在这个示例中,我们使用@PostMapping注解将POST请求映射到/users/add路径上,并指定处理方法为addUser()。在addUser()方法中,我们使用@RequestBody注解将请求体中的数据自动转换为User对象。这样,当请求体中包含User对象的数据时,该对象将被自动解析并传递给addUser()方法进行处理。在这个例子中,我们将获取到的User对象作为输入,用于添加用户的逻辑,并返回一个字符串作为响应。
测试相关注解
(24)@SpringBootTest
作用:测试Spring Boot应用程序的注解,它会启动整个应用程序上下文以便于执行测试。该注解可以让你在测试时使用完整的Spring应用程序上下文,包括所有的bean、配置和中间件。
以下是一个使用@SpringBootTest注解的示例:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class MyApplicationTest { @Autowired private MyService myService; @Test public void testMyService() { // 执行测试方法,使用myService进行测试 }
}
(25)@MockBean
作用:是在测试中模拟指定的bean。使用该注解可以在测试中创建一个模拟的bean,以便于替换应用程序上下文中原有的bean。通过模拟bean,可以在测试过程中模拟外部依赖或服务,以便于独立地测试应用程序的特定方面。
以下是一个使用@MockBean注解的示例:
import org.junit.jupiter.api.Test;
import org.mockito.MockBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBeanBuilder;
import org.springframework.test.context.junit4.rules.SpringClassRule;
import org.springframework.test.context.junit4.rules.SpringMethodRule; import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*; @SpringBootTest
public class MyApplicationTest { @Autowired private MyService myService; @MockBean private MyDependency myDependency; @Test public void testMyService() { // 使用MockBean模拟MyDependency对象,并注入到myService中 // 在测试方法中,可以通过模拟MyDependency对象来测试myService的行为 // 例如,可以调用myDependency的某个方法,验证myService是否正确地使用了该方法 }
}
(26)@Test
注意
SpringBoot和Spring都有各自的测试框架,用于对应用程序进行单元测试和集成测试。
以下是SpringBoot中的@Test注解的作用和示例:
作用: SpringBoot @Test注解的作用是告诉Spring Boot在测试时启动整个应用程序上下文,以便进行集成测试。
以下是一个使用SpringBoot @Test org.junit.jupiter.api.Test
注解的示例:
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTest { @Test public void testMyApplication() { // 在这里编写集成测试代码,使用整个应用程序上下文进行测试 }
}
以下是Spring中的@Test注解的作用和示例:
@Test注解用于标记测试方法或测试类,用于执行单元测试。在测试类中,被标记为测试方法的方法将会被JUnit编译器自动识别并执行。
以下是一个使用@Test org.junit.Test
注解的示例:
import org.junit.Test;
import static org.junit.Assert.*; public class MyOtherTest { @Test public void testSubtraction() { int result = 4 - 2; assertEquals(2, result); }
}
在上面的示例中,@Test注解用于标记testSubtraction()方法为测试方法,JUnit编译器会自动执行该方法并验证其结果是否符合预期。
(27)@BeforeEach
注意:@AfterEach注解是JUnit5中的注解
作用:用于表示在每个测试方法之前应该执行该注解的方法。这个注解可以用来进行测试前的准备工作,比如初始化测试环境、准备测试数据等。
以下是一个使用@BeforeEach注解的示例:
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; public class MyTest { @BeforeEach public void setUp() { // 在每个测试方法之前执行的代码,可以用来进行准备工作 } @Test public void testMethod1() { // 测试方法1 } @Test public void testMethod2() { // 测试方法2 }
}
(28)@AfterEach
注意:@AfterEach注解是JUnit5中的注解
作用:这个注解可以用来进行测试后的清理工作,比如回滚数据库修改、关闭文件流等。
以下是一个使用@AfterEach注解的示例:
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test; public class MyTest { @Test public void testMethod1() { // 测试方法1 } @Test public void testMethod2() { // 测试方法2 } @AfterEach public void tearDown() { // 在每个测试方法之后执行的代码,可以用来进行清理工作 }
}
(29)@BeforeAll
注意:@AfterEach注解是JUnit5中的注解
作用:用于表示在所有测试方法之前只执行一次该注解的方法。这个注解可以用来进行测试前的准备工作,比如初始化测试环境、读取测试数据等。
以下是一个使用@BeforeAll注解的示例:
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test; public class MyTest { @BeforeAll public static void setupAll() { // 在所有测试方法之前只执行一次的代码,可以用来进行准备工作 } @Test public void testMethod1() { // 测试方法1 } @Test public void testMethod2() { // 测试方法2 }
}
(30)@AfterAll
作用:@AfterAll注解是JUnit5中的注解,用于表示在所有测试方法之后只执行一次该注解的方法。这个注解可以用来进行测试后的清理工作,比如关闭测试数据库连接、清理测试文件等。
以下是一个使用@AfterAll注解的示例:
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test; public class MyTest { @Test public void testMethod1() { // 测试方法1 } @Test public void testMethod2() { // 测试方法2 } @AfterAll public static void tearDownAll() { // 在所有测试方法之后只执行一次的代码,可以用来进行清理工作 }
}
相关文章:

第六章 :Spring Boot web开发常用注解(一)
第六章 :Spring Boot web开发常用注解(一) 前言 本章节知识重点:作者结合自身开发经验,以及觉察到的一个现象:Springboot注解全面理解和掌握的并不多,对注解进行了全面总结,共分两个…...
Unity DOTS系列之System中如何使用SystemAPI.Query迭代数据
最近DOTS发布了正式的版本, 我们来分享一下System中如何基于SystemAPI.Query来迭代World中的数据,方便大家上手学习掌握Unity DOTS开发。 SystemAPI.Query的使用 System有两种,一种是Unmanaged 的ISystem,一种是managed 的SystemBase,这两种System都可…...
【objectarx.net】创建渐变填充
net.gradientHatch(创建渐变填充)...
【软考】信息安全基本要素
目录 一、机密性二、完整性三、可用性四、可控性五、可审查性六、可鉴别性七、不可抵赖性八、可靠性 一、机密性 1.保证信息不泄露给未经授权的进程或实体,只供授权者使用 二、完整性 1.信息只能被得到允许的人修改,并且能够被判别该信息是否已被篡改过…...

[C++ ]:7.内存管理+模板引入。
内存管理模板引入 一.内存管理:1.内存区域划分图:2.区域划分实例:3.C 内存管理方式:newdelete4.自定义类型的new和delete:一.简单类:二.日期类:三.栈类:四.队列类(栈实现…...

【计算机网络】HTTPS
文章目录 前言为什么会出现 HTTPSHTTPS 是如何进行加密的1. 对称加密非对称加密中间人攻击3. 引入证书 前言 前面我们学习了应用层中使用比较常见的 HTTP 协议,但是呢?在实际的使用中,浏览器和服务器之间的通信其实很少使用到 HTTPÿ…...

阿里云服务器怎么样?阿里云服务器优势、价格及常见问题介绍
阿里云(Alibaba Cloud)是阿里巴巴集团旗下的云计算服务提供商,其提供的云服务器(ECS)是其核心服务之一。在云计算市场中,阿里云服务器备受用户的青睐,那么,阿里云服务器究竟怎么样呢…...

【狂神说Java】Dubbo + Zookeeper
✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :狂神说Java 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远…...
Pytorch实战教程(三)-构建神经网络
0. 前言 我们已经学习了如何从零开始构建神经网络,神经网络通常包括输入层、隐藏层、输出层、激活函数、损失函数和学习率等基本组件。在本节中,我们将学习如何在简单数据集上使用 PyTorch 构建神经网络,利用张量对象操作和梯度值计算更新网络权重。 1. PyTorch 构建神经网…...
简单处理一下挖矿进程
接收服务器异常报警短信,进入服务器查看进程,显示cpu高占率的进程, $ top -c PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND …...
ES6学习笔记
数据类型:Number, String, Boolean, array , tuple,enum,any,Null, Undefined, Object, void, never 扩展运算符... 数据结构:Array, Set, Map 装饰器是一种函数,写成 函数名 类的装饰&…...

U-Mail邮箱系统,政务邮箱国产化改造优质之选
近年来,我国电子政务进入了全面铺开快速发展的阶段,政府机构的信息化管理能力也大幅提升。但是,随着国际形势的新变化,国家主管部门陆续出台相关政策,全面指导并要求政府机构落实国产化信息技术建设。因此,…...
C++ 数组学习资料
C 数组学习资料 目录 什么是数组?声明和初始化数组访问数组元素多维数组数组和指针常见的数组操作数组的限制和注意事项 什么是数组? 在 C 中,数组是一种用于存储相同类型元素的数据结构。它是一个固定大小的连续内存块,每个元…...

LabVIEW在OPC中使用基金会现场总线
LabVIEW在OPC中使用基金会现场总线 本文讨论了如何使用开放的OPC(用于过程控制的OLE)接口访问基金会现场总线网络和设备。 NI-FBUS通信管理器随附了一个OPC数据访问服务器。 (NI-FBUS Configurator自动包含NI-FBUS通信管理器。)…...

京东数据分析:2023年Q3户外鞋服市场分析报告(冲锋衣行业销售数据分析)
从露营、骑行、徒步、桨板、垂钓、飞盘、滑雪到如今的city walk,近两年户外运动已经成为了年轻人新的生活方式。户外运动的爆发也刺激了人们对于鞋服在穿搭、场景化、专业性功能等方向的需求,户外鞋服市场迎来增长。 而全国性的降温则带给目前的户外鞋服…...

使用Pytorch的一些小细节(一)
文章目录 前言数据结构-张量max函数索引函数赋值函数拼接函数 前言 由于不经常动手写代码,所以对于python语言中的常见数据结构的用法也不是很熟悉,对于pytorch中的数据结构就更加不熟悉了。之前的代码基础是基于C语言的,属性都是自己定义&a…...

PDF Expert for mac(专业pdf编辑器)苹果电脑
PDF Expert for Mac 是一款功能强大、界面简洁的PDF阅读、编辑和转换工具,为Mac用户提供了全面而便捷的PDF处理体验。无论是日常工作中的文档阅读、标注,还是专业需求下的编辑、转换,PDF Expert 都能满足您的各种需求。 首先,PDF…...

班级新闻管理系统asp.net+sqlserver
班级新闻管理系统 附加功能 新闻图片,点击次数访问自增,每个人都只能增删改查自己发布的新闻,并可以看到所有人发布的新闻 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql serve…...
navicat导入.sql文件出现:[ERR] 1067 - Invalid default value for ‘create_date‘
比较老的系统生成的数据库导入5.7时报错[Err] 1067 - Invalid default value for create_time 错误分析 表中的第一个TIMESTAMP列(如果未声明为NULL或显示DEFAULT或ON UPDATE子句)将自动分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属…...

Labview利用声卡捕获波形
一般的计算机上自带的声卡,均既有A/D功能,又有D/A功能,就是一款具备基本配置的数据采集卡,并且技术成熟,性能稳定。 后台如下:...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...