springboot2.2.X手册:36个注解详细解析,一目了然

2024-06-18 01:48

本文主要是介绍springboot2.2.X手册:36个注解详细解析,一目了然,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

@Component

@Service

@Repository

@Controller

@Autowired

@Inject

@Resource

@Configuration

@Bean

@ComponentScan

@WishlyConfiguration

@Aspect

@After

@Before

@Around

@PointCut

@Scope

@Value

@PropertySource

@Profile

@Conditional

@EnableAsync

@Async

@EnableScheduling

@Scheduled

@EnableJpaRepositories

@EnableTransactionManagement

@EnableCaching

@Cacheable

@RequestMapping

@ResponseBody

@RequestBody

@PathVariable

@RestController

@ControllerAdvice

@ExceptionHandler


 

@Component

作用及范围:把对象加载到spring容器中,最基础的存在,很多的注解都是继承它的,只有一个属性值,默认值是“”,

例子或源码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {String value() default "";}

@Service

作用及范围:一般用于service层的注解,继承了Component组件,本质上一样,方便做业务范围区分而已。

例子或源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {@AliasFor(annotation = Component.class)String value() default "";}

 

@Repository

作用及范围:作用于dao层的注解,很多经常用JPA的同学都清楚这个东西,与Service本质上一样,业务领域上区别而已

例子或源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {@AliasFor(annotation = Component.class)String value() default "";}

 

 

@Controller

作用及范围:作用在控制器上的注解,与Service一样,业务领域区分

例子或源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {@AliasFor(annotation = Component.class)String value() default "";}

@Autowired

作用及范围:它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,其实就是获取容器中的对象

注意事项:

在使用@Autowired时,首先在容器中查询对应类型的bean

如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据

如果查询的结果不止一个,那么@Autowired会根据名称来查找。

如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false

例子或源码:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {boolean required() default true;}

@Inject

作用及范围:它是JSR330 (Dependency Injection for Java)中的规范,需要导入javax.inject.Inject;实现注入,根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Named,可以作用在变量、setter方法、构造函数上。很少用

例子或源码:

@Inject
public Message(Header header, Content content)
{this.headr = header;this.content = content;
}
public class Messager
{@Injectprivate Message message;
}

 

 

@Resource

作用及范围:它是JSR250规范的实现,也是需要导入javax.annotation实现注入,根据名称进行自动装配的,一般会指定一个name属性,可以作用在变量、setter方法上。

例子或源码:

@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
@Repeatable(Resources.class)
public @interface Resource {String name() default "";String lookup() default "";Class<?> type() default java.lang.Object.class;enum AuthenticationType {CONTAINER,APPLICATION}AuthenticationType authenticationType() default AuthenticationType.CONTAINER;boolean shareable() default true;String mappedName() default "";String description() default "";
}

@Configuration

作用及范围:从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,同样AliasFor最原始的注解Component

例子或源码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {@AliasFor(annotation = Component.class)String value() default "";boolean proxyBeanMethods() default true;}

@Bean

作用及范围:作用于方法上,产生一个对象,然后这个对象交给Spring管理,在进行初始化的过程中,只会产生并调用一次,如果容器管理一个或者多个bean,这些bean都需要在Configuration注解下进行创建,在一个方法上使用Bean注解就表明这个方法需要交给Spring进行管理。

例子或源码:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {@AliasFor("name")String[] value() default {};@AliasFor("value")String[] name() default {};Autowire autowire() default Autowire.NO;String initMethod() default "";String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;}

@ComponentScan

作用及范围:扫描当前类下面的所有对象,为什么说Component是最基础的东西,就是要给这个注解扫描,非常巧妙的设计,可以扫描多个包。

例子或源码:

@ComponentScan(“com.abc.aaa”)
@SpringBootApplication
public class SpringbootApplication {
@ComponentScan({"com.abc.bbb","com.abc.aaa"})
@SpringBootApplication
public class SpringbootApplication {

 

 

@WishlyConfiguration

作用及范围:这个是ConfigurationComponentScan的组合注解,可以替代这两个注解,目前非常少用。

例子或源码:没用过

@Aspect

作用及范围:切面注解,切面编程经常用到的,可以做日志

例子或源码:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Aspect {public String value() default "";
}

@After

作用及范围:配置Aspect做切面使用,在方法执行之后执行(方法上)

例子或源码:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface After {String value();String argNames() default "";
}

@Before

作用及范围:配置Aspect做切面使用,在方法执行之前执行(方法上)

例子或源码:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Before {String value();String argNames() default "";}

@Around

作用及范围:配置Aspect做切面使用,在方法执行之前与之后执行(方法上)

例子或源码:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Around {String value();String argNames() default "";}

@PointCut

作用及范围:配置Aspect做切面使用,声明切点

例子或源码:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Pointcut {String value() default "";String argNames() default "";
}

 

 

@Scope

作用及范围:Singleton (单例,一个Spring容器中只有一个bean实例,默认模式),

Protetype (每次调用新建一个bean),

Request (web项目中,给每个http request新建一个bean),

Session (web项目中,给每个http session新建一个bean),

GlobalSession(给每一个 global http session新建一个Bean实例)

例子或源码:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scope {@AliasFor("scopeName")String value() default "";@AliasFor("value")String scopeName() default "";ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;}

@Value

作用及范围:将外部的值动态注入到Bean中,使用的情况有:

  1. 注入普通字符串
  2. 注入操作系统属性
  3. 注入表达式结果
  4. 注入其他Bean属性:注入beanInject对象的属性another
  5. 注入文件资源
  6. 注入URL资源

例子或源码:

   @Value("normal")private String normal; // 注入普通字符串@Value("#{systemProperties['os.name']}")private String systemPropertiesName; // 注入操作系统属性@Value("#{ T(java.lang.Math).random() * 100.0 }")private double randomNumber; //注入表达式结果@Value("#{beanInject.another}")private String fromAnotherBean; // 注入其他Bean属性:注入beanInject对象的属性another,类具体定义见下面@Value("classpath:com/hry/spring/configinject/config.txt")private Resource resourceFile; // 注入文件资源@Value("http://www.baidu.com")private Resource testUrl; // 注入URL资源

 

 

@PropertySource

作用及范围:加载指定的配置文件

例子或源码:

@PropertySource(value = {"classpath:test.properties"})
@Component
@ConfigurationProperties(prefix = "test")
public class Test {private Integer id;private String lastName;
}

@Profile

作用及范围:根据不同环境加载bean对象

例子或源码:

@PropertySource("classpath:/user.properties")
@Configuration
public class MainConfigOfProfile implements EmbeddedValueResolverAware{@Profile("test")@Bean("testUser")public User testUser()  {User a =new User();return a;}@Profile("dev")@Bean("devUser")public User devUser()  {User a =new User();return a;}}

@Conditional

作用及范围:是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean

例子或源码:

@Configuration
public class BeanConfig {//只有一个类时,大括号可以省略//如果WindowsCondition的实现方法返回true,则注入这个bean    @Conditional({WindowsCondition.class})@Bean(name = "bill")public Window window(){return new Window();}//如果LinuxCondition的实现方法返回true,则注入这个bean@Conditional({LinuxCondition.class})@Bean("linux")public Linex linux(){return new Linex();}
}

 

 

@EnableAsync

作用及范围:启动异步,与Async配合使用

例子或源码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AsyncConfigurationSelector.class)
public @interface EnableAsync {Class<? extends Annotation> annotation() default Annotation.class;boolean proxyTargetClass() default false;AdviceMode mode() default AdviceMode.PROXY;int order() default Ordered.LOWEST_PRECEDENCE;}

@Async

作用及范围:异步注解,需配合EnableAsync使用,使用后,方法变成异步方法

例子或源码:

@Component
public class TreadTasks {@Asyncpublic void startMyTreadTask() {System.out.println("this is my async task");}
}

@EnableScheduling

作用及范围:定时任务注解扫描器,会扫描包体下的所有定时任务

例子或源码:

@SpringBootApplication
@EnableScheduling //开启定时任务
public class MainApplication {public static void main(String[] args) {SpringApplication.run(MainApplication.class, args);}
}

 

 

@Scheduled

作用及范围:定时任务控制器

例子或源码:

 

springboot2.2.X手册:36个注解详细解析,一目了然

 

@Scheduled(cron = "0 0 2 * * ?") 

@EnableJpaRepositories

作用及范围:开启对SpringData JPA Repository的支持

例子或源码:

@EnableJpaRepositories({"com.cshtong.sample.repository", "com.cshtong.tower.repository"})

@EnableTransactionManagement

作用及范围:开启注解式事务的支持

例子或源码:最常见的东西,不做讲解了

@EnableTransactionManagement // 启注解事务管理
@SpringBootApplication
public class ProfiledemoApplication {public static void main(String[] args) {SpringApplication.run(ProfiledemoApplication.class, args);}

 

 

@EnableCaching

作用及范围:开启注解式的缓存支持

例子或源码:

@Configuration
@EnableCaching
public class CachingConfig {@Beanpublic CacheManager cacheManager() {SimpleCacheManager cacheManager = new SimpleCacheManager();cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("sampleCache")));return cacheManager;}
}

@Cacheable

作用及范围:把信息放到存储中去

例子或源码:

@Cacheable(value = { "sampleCache","sampleCache2" },key="targetClass.getName()+'.'+methodName+'.'+#id")public String getUser(int id) {if (id == 1) {return "1";} else {return "2";}}

 

@RequestMapping

作用及范围:注解来将请求URL映射到整个类上,或某个特定的方法上

例子或源码:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {String name() default "";@AliasFor("path")String[] value() default {};@AliasFor("value")String[] path() default {};RequestMethod[] method() default {};String[] params() default {};String[] headers() default {};String[] consumes() default {};String[] produces() default {};}

 

 

@ResponseBody

作用及范围:将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据

例子或源码:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseBody {}

@RequestBody

作用及范围:用来接收前端传递给后端的json字符串中的数据(请求体中的数据的)

例子或源码:

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBody {/*** 默认是必须的*/boolean required() default true;}

@PathVariable

作用及范围:接收请求路径中占位符的值

例子或源码:

@RequestMapping(value=”user/{id}/{name}”)
请求路径:http://localhost:8080/user//1/james

@RestController

作用及范围:等同于@Controller + @ResponseBody

例子或源码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {@AliasFor(annotation = Controller.class)String value() default "";}

 

 

@ControllerAdvice

作用及范围:全局异常处理;全局数据绑定;全局数据预处理

例子或源码:

@ControllerAdvice
public class MyGlobalExceptionHandler {@ExceptionHandler(Exception.class)public ModelAndView customException(Exception e) {ModelAndView mv = new ModelAndView();mv.addObject("message", e.getMessage());mv.setViewName("error");return mv;}
}@ControllerAdvice
public class MyGlobalExceptionHandler {@ModelAttribute(name = "md")public Map<String,Object> mydata() {HashMap<String, Object> map = new HashMap<>();map.put("gender", "女");return map;}
}

@ExceptionHandler

作用及范围:用于处理controller层面的异常

例子或源码:

 @ExceptionHandler({RuntimeException.class})public ModelAndView fix(Exception ex){System.out.println("aaaa");return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));}

 

这篇关于springboot2.2.X手册:36个注解详细解析,一目了然的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070966

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决