springboot 中的注解

曾经终败给现在 2022-11-21 04:08 449阅读 0赞

类上的注解:
@Slf4j
不想每次都写private final Logger logger = LoggerFactory.getLogger(当前类名.class); 可以直接使用log.warn(“oo”);
需要:1 idea需要安装Lombok插件 2 pom中引入lombok
参考:https://www.jianshu.com/p/6e137ee836a1

@EnableAsync
使用多线程,往往是创建Thread,或者是实现runnable接口,用到线程池的时候还需要创建Executors,
spring中注解@EnableAsync就可以使用多线程,@Async加在线程任务的方法上(需要异步执行的任务),定义一个线程任务,通过spring提供的ThreadPoolTaskExecutor就可以使用线程池。使用步骤:
1)@EnableAsync定义配置类,需要实现AsyncConfiguer接口,并实现它的方法,包括配置线程池参数和线程的异常处理
package ds.watsons.app.label.config;
import java.util.concurrent.Executor;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

@Configurable
@EnableAsync
public class TreadPoolConfigTest implements AsyncConfigurer{

  1. @Override
  2. public Executor getAsyncExecutor() \{
  3. // TODO Auto-generated method stub
  4. ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
  5. //核心线程池数量,方法: 返回可用处理器的Java虚拟机的数量。
  6. executor.setCorePoolSize(Runtime.getRuntime().availableProcessors());
  7. //最大线程数量
  8. executor.setMaxPoolSize(Runtime.getRuntime().availableProcessors()\*5);
  9. //线程池的队列容量
  10. executor.setQueueCapacity(Runtime.getRuntime().availableProcessors()\*2);
  11. //线程名称的前缀
  12. executor.setThreadNamePrefix("this-excutor-");
  13. // setRejectedExecutionHandler:当pool已经达到max size的时候,如何处理新任务
  14. // CallerRunsPolicy:不在新线程中执行任务,而是由调用者所在的线程来执行
  15. //executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
  16. executor.initialize();
  17. return executor;
  18. \}
  19. /\*异步任务中异常处理\*/
  20. @Override
  21. public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() \{
  22. // TODO Auto-generated method stub
  23. return new SimpleAsyncUncaughtExceptionHandler();
  24. \}

}
2)@Async定义任务类
package ds.watsons.app.label.service;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

@Component
public class TreadTasks {
@Async
public void startMyTreadTask() {
System.out.println(“this is my async task”);
}
}
3)调用异步线程任务
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import ds.watsons.app.label.service.TreadTasks;

@Controller
public class AsyncTaskUse {
@Autowired
private TreadTasks treadTasks;
@GetMapping(“/startMysync”)
public void useMySyncTask() {
treadTasks.startMyTreadTask();
}
}
下面就可以发送请求与调用了。
参考:https://blog.csdn.net/hy\_coming/article/details/93885115

@ServletComponentScan,@ComponentScan,@Configuration 解析
1 @ServletComponentScan
作用:在SpringBoot的main方法上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。
范围:默认指扫描当前启动类所在的包里的对象,如果Application类和Servlet类不在同一包下,则@ServletComponentScan需要添加相应的路径

2 @ComponentScan
作用:告诉Spring从哪里找到bean
范围:扫描当前启动类所在的包及其子包里的对象,如果你的其他类都在使用了@SpringBootApplication注解的主类所在的包及其下级包,则你什么都不用做
写法:
ComponentScan({“com.xiao.hui”,“com.xiao.qiang”})
@ComponentScan(“com.xiao”)
@ComponentScan(value = “com.xiao”)
@ComponentScan(basePackages = { “com.xiao” })
@ComponentScan(basePackageClasses=要扫描类.class所在位置的包) 意思是要扫描哪个类所在的包
使用:
springBoot项目:写启动类的时候使用@ComponentScan指明对象扫描范围
非SpringBoot项目:必须显式地使用@ComponentScan注解定义被扫描的包,可以通过XML文件在应用上下文中定义或在Java代码中对应用上下文定义,如:
@@Configuration 定义配置类方法
xml方法:
@ComponentScan自动扫描组件实例:@Controller @Service @Repository @Component

3 @Configuration
用于类上的@Configuration经常与方法上的@Bean一起使用,声明该类为配置类,方法返回一个bean,和原来xml配置是等效的。
@Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。
@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。
https://www.cnblogs.com/xiaohu1218/p/10800790.html
https://blog.csdn.net/m0\_37739193/article/details/85097477

@EnableAutoConfiguration
打开自动配置,类似在java中自动import,属于自动导入 。
如果你在pom.xml中配置依赖spring-boot-starter-web,那么其jar包会加入到类路径classpath,spring会自动配置Tomcat和Spring MVC。
深入了解参考: https://www.jianshu.com/p/5cb57be5d0ea

@Mapper注解:
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
添加位置:接口类上面
问题:想要每个接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan解决

@MapperScan(“com.tal.coding.platform.mapper”)
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加,

@SpringBootApplication(scanBasePackages = “com.tal”)
启动类注解,原理就是使用了@EnableAutoConfiguration、@ComponentScan、@Configuration,
main方法中调用SpringApplication.run

@ImportResource与@Import
@Import注解是引入java类:
导入@Configuration注解的配置类(4.2版本之前只可以导入配置类,4.2版本之后也可以导入普通类)
导入ImportSelector的实现类
导入ImportBeanDefinitionRegistrar的实现类
@ImportResource是引入spring配置文件.xml
实际使用参考:https://blog.csdn.net/qq\_26323323/article/details/89789962

@EnableScheduling
通过注解开启定时任务。
配置文件开启定时器的方法:

swagger api注解
controller中:
@Api(tags = “班级”)
@RestController
swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目实现了springMVC框架的无缝集成功能,方便生成restful风格的接口文档,
详细参考: https://blog.csdn.net/HiBoyljw/article/details/81110553

springboot @Select @Insert @Update @Delete
@Insert
@Select
https://www.cnblogs.com/wskb/p/11578075.html

发表评论

表情:
评论列表 (有 0 条评论,449人围观)

还没有评论,来说两句吧...

相关阅读

    相关 springboot常用注解

    1:@Inherited 该注解的用法是:`如果某个类使用了被@Inherited标注的注解,则该类的子类会自动继承该注解,即@Inherited的作用就是标记注解是否是