spring和springboot注解及解析

spring和springboot注解及使用

1.@Controller

解析:组合注解(组合了@Component注解),应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类,然后将web请求映射到注解了@RequestMapping的方法上。

2.@Service

解析:组合注解(组合了@Component注解),应用在service层(业务逻辑层)

3.@Reponsitory

解析:组合注解(组合了@Component注解),应用在dao层(数据访问层)

4.@Component

解析:表示一个带注释的类是一个“组件”,成为Spring管理的Bean。当使用基于注解的配置和类路径扫描时,这些类被视为自动检测的候选对象。同时@Component还是一个元注解。

可配合CommandLineRunner使用,在程序启动后执行一些基础任务。

5.@Autowired

解析:Spring提供的工具(由Spring的依赖注入工具(BeanPostProcessor、BeanFactoryPostProcessor)自动注入。)

6.@Resource

解析:JSR-250提供的注解 (JSR-250 注释,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释。@PostConstruct 和 @PreDestroy 注释:

为了定义一个 bean 的安装和卸载,我们使用 init-method 和/或 destroy-method 参数简单的声明一下 。init-method 属性指定了一个方法,该方法在 bean 的实例化阶段会立即被调用。同样地,destroy-method 指定了一个方法,该方法只在一个 bean 从容器中删除之前被调用。你可以使用 @PostConstruct 注释作为初始化回调函数的一个替代,@PreDestroy 注释作为销毁回调函数的一个替代)你可以在字段中或者 setter 方法中使用 @Resource 注释,它和在 Java EE 5 中的运作是一样的。@Resource 注释使用一个 ‘name’ 属性,该属性以一个 bean 名称的形式被注入。

7.@Inject

解析:JSR-250提供的注解 (JSR-250 注释,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释。@PostConstruct 和 @PreDestroy 注释:

为了定义一个 bean 的安装和卸载,我们使用 init-method 和/或 destroy-method 参数简单的声明一下 。init-method 属性指定了一个方法,该方法在 bean 的实例化阶段会立即被调用。同样地,destroy-method 指定了一个方法,该方法只在一个 bean 从容器中删除之前被调用。你可以使用 @PostConstruct 注释作为初始化回调函数的一个替代,@PreDestroy 注释作为销毁回调函数的一个替代)

8.@Configuration

解析:声明当前类是一个配置类(相当于一个Spring配置的xml文件)

9.@ComponentScan

解析:自动扫描指定包下所有使用@Service,@Component,@Controller,@Repository的类并注册

10.@Bean

解析:注解在方法上,声明当前方法的返回值为一个Bean。返回的Bean对应的类中可以定义init()方法和destroy()方法,然后在@Bean(initMethod=”init”,destroyMethod=”destroy”)定义,在构造之后执行init,在销毁之前执行destroy。

11.@Aspect

解析:声明一个切面(就是说这是一个额外功能)

例子用法:

/** * 切面 = 切点(切点表达式) + 通知(要增强的代码,方法) /@Aspect@Componentpublic class MyAspect { /* * 通知 / @Before("execution( * com.it.bigdata.UserDao.delete(…))") public void advice1() { System.out.println(“通知1”); }}

12.@After

解析:后置建言(advice),在原方法前执行。(增强的代码)

列子用法:

@After(“execution( * com.it.bigdata.UserDao.delete*(…))”)public void advice1() { System.out.println(“前置通知”);}

13.@Before

解析:前置建言(advice),在原方法后执行。(增强的代码)

例子用法同上

14.@Around

解析:环绕建言(advice),在原方法执行前执行,在原方法执行后再执行(@Around可以实现其他两种advice)(增强的代码)

例子用法同上

15.@PointCut

解析:声明切点,即定义拦截规则,确定有哪些方法会被切入(要被增强的方法)

16.@Transactional

解析:声明事务(一般默认配置即可满足要求,当然也可以自定义)

17.@Cacheable

解析:声明数据缓存(spring自带的缓存。常用Redis做缓存,所以该注解不常用)

18.@EnableAspectJAutoProxy

解析:开启Spring对AspectJ的支持(基于AspectJ的AOP,AspectJ是一个基于Java语言的面向切面的AOP框架;Spring2.0以后新增了对AspectJ切点表达式支持;@AspectJ 是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面。新版本Spring框架,建议使用AspectJ方式来开发AOP。Aspectj的切点表达式语法:execution(表达式)

execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)

public * *(…) —检索所有的public方法

execution(“* cn.it.spring4.demo1.dao.*(…)”) —只检索当前包

execution(“* cn.it.spring4.demo1.dao…*(…)”) —检索包及当前包的子包.)

19.@Value

解析:值得注入。经常与Sping EL表达式语言一起使用,注入普通字符,系统属性,表达式运算结果,其他Bean的属性,文件内容,网址请求内容,配置文件属性值等等

20.@PropertySource

解析:指定文件地址。提供了一种方便的、声明性的机制,用于向Spring的环境添加PropertySource。与@configuration类一起使用。

21.@PostConstruct

解析:标注在方法上,该方法在构造函数执行完成之后执行。

22.@PreDestroy

解析:标注在方法上,该方法在对象销毁之前执行

23.@Profile

解析:表示当一个或多个指定的文件是活动的时,一个组件是有资格注册的。使用@Profile注解类或者方法,达到在不同情况下选择实例化不同的Bean。@Profile(“dev”)表示为dev时实例化。用法参考:https://blog.csdn.net/wufaliang003/article/details/77662556

使用案例:

配置类

@Configurationpublic class ProfileConfig { @Bean @Profile(“upper”) public UpperAction upperAction1(){ return new UpperAction(“Tom”); } @Bean @Profile(“upper1”) public UpperAction upperAction2(){ return new UpperAction(“Jack”); } @Bean @Profile(“lower”) public LowerAction lowerAction1(){ return new LowerAction(); }/* @Bean @Profile(“upper0”) public Action action(){ Action action1 =(Action) new UpperAction(“Tom”); return action1; }*/}

测试类

@Test public void test0(){ AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(); ctx.getEnvironment().setActiveProfiles(“upper”); ctx.register(ProfileConfig.class); ctx.refresh(); UpperAction upperAction=ctx.getBean(UpperAction.class); upperAction.execute(“hahaha”); }

24.@Import

解析:@import 注解允许从另一个配置类中加载 @Bean 定义。考虑 ConfigA 类,如下所示:

@Configurationpublic class ConfigA { @Bean public A a() { return new A(); }}

你可以在另一个 Bean 声明中导入上述 Bean 声明,如下所示:

@Configuration@Import(ConfigA.class)public class ConfigB { @Bean public B a() { return new A(); }}

25.@EnableAsync

解析:开启异步任务支持。注解在配置类上。和@Configuration一同使用。

26.@Async

解析:注解在方法上标示这是一个异步方法,在类上标示这个类所有的方法都是异步方法。

用法参考:https://www.cnblogs.com/jpfss/p/10273129.html

27.@EnableScheduling

解析:注解在配置类上,开启对计划任务的支持。(就是spring中的定时任务)

用法参考:https://blog.csdn.net/u012129558/article/details/78722714

28.@Scheduled

解析:注解在方法上,声明该方法是计划任务。支持多种类型的计划任务:cron,fixDelay,fixRate(同@EnableScheduling一起使用)

29.@Conditional

解析:根据满足某一特定条件(条件一:作为任何@Bean方法的方法级注释。条件二:作为任何类的直接或间接注释的类型级别注释 @Component,包括@Configuration类。条件三:作为元注释,目的是组成自定义构造型注释)创建特定的Bean

参考:https://www.cnblogs.com/mzq123/p/11874128.html

30.@Enable*

解析:通过简单的@Enable来开启一项功能的支持。所有@Enable注解都有一个@Import注解,@Import是用来导入配置类的,这也就意味着这些自动开启的实现其实是导入了一些自动配置的Bean(1.直接导入配置类2.依据条件选择配置类3.动态注册配置类)

31.@RunWith

解析:这个是Junit的注解,springboot集成了junit。一般在测试类里使用:@RunWith(SpringJUnit4ClassRunner.class) — SpringJUnit4ClassRunner在JUnit环境下提供Sprng TestContext Framework的功能

用法实例:

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={“classpath:aop/applicationContext.xml”})

32.@ContextConfiguration

解析:用来加载配置ApplicationContext,其中classes属性用来加载配置类:@ContextConfiguration(classes = {TestConfig.class(自定义的一个配置类)})

用法实例:

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {“classpath*😕*.xml”})public class CDPlayerTest { }

33.@ActiveProfiles

解析:用来声明活动的profile–@ActiveProfiles(“prod”(这个prod定义在配置类中))

使用案例:

配置类

@Configurationpublic class ProfileConfig { @Bean @Profile(“upper”) public UpperAction upperAction1(){ return new UpperAction(“Tom”); } @Bean @Profile(“upper1”) public UpperAction upperAction2(){ return new UpperAction(“Jack”); } @Bean @Profile(“lower”) public LowerAction lowerAction1(){ return new LowerAction(); }/* @Bean @Profile(“upper0”) public Action action(){ Action action1 =(Action) new UpperAction(“Tom”); return action1; }*/}

测试类

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes =ProfileConfig.class)@ActiveProfiles(“upper”)public class Test4_UsingProfile { @Autowired Action action; @Test public void test3() { action.execute(“wushuohanaaaaaa”); }}

34.@EnableWebMvc

解析:用在配置类上,开启SpringMvc的Mvc的一些默认配置:如ViewResolver,MessageConverter等。同时在自己定制SpringMvc的相关配置时需要做到两点:1.配置类继承WebMvcConfigurerAdapter类2.就是必须使用这个@EnableWebMvc注解。

使用方法:参考https://blog.csdn.net/Farrell_zeng/article/details/107065100

35.@RequestMapping

解析:用来映射web请求(访问路径和参数),处理类和方法的。可以注解在类和方法上,注解在方法上的@RequestMapping路径会继承注解在类上的路径。同时支持Serlvet的request和response作为参数,也支持对request和response的媒体类型进行配置。其中有value(路径),produces(定义返回的媒体类型和字符集),method(指定请求方式)等属性。

36.@ResponseBody

解析:将返回值放在response体内。返回的是数据而不是页面(就是直接返回具体的值 比如json,string,map等等)

37.@RequestBody

解析:允许request的参数在request体中,而不是在直接链接在地址的后面。此注解放置在参数前。(就是原来的url后面跟的参数 可以挪到这个注解的里面)

参考:https://www.cnblogs.com/panxuejun/p/6094640.html

38.@PathVariable

解析:放置在参数前,用来接受路径参数。

用法实例:

@RequestMapping("/getUserById/{name}") public User getUser(@PathVariable(“name”) String name){ return userService.selectUser(name); }

39.@RestController

解析:组合注解,组合了@Controller和@ResponseBody,当我们只开发一个和页面交互数据的控制层的时候可以使用此注解。

40.@ControllerAdvice

解析:用在类上,声明一个控制器建言,它也组合了@Component注解,会自动注册为Spring的Bean。参考:https://blog.csdn.net/weixin_40792878/article/details/81915712

41.@ExceptionHandler

解析:用在方法上定义全局处理,通过他的value属性可以过滤拦截的条件:@ExceptionHandler(value=Exception.class)–表示拦截所有的Exception。

42.@ModelAttribute

解析: 将键值对添加到全局,所有注解了@RequestMapping的方法可获得次键值对(就是在请求到达之前,往model里addAttribute一对name-value而已)。

43.@InitBinder

解析:通过@InitBinder注解定制WebDataBinder(用在方法上,方法有一个WebDataBinder作为参数,用WebDataBinder在方法内定制数据绑定,例如可以忽略request传过来的参数Id等)

参考:https://blog.csdn.net/yk10010/article/details/81665358

44.@WebAppConfiguration

解析:一般用在测试上,注解在类上,用来声明加载的ApplicationContext是一个WebApplicationContext。他的属性指定的是Web资源的位置,默认为src/main/webapp,我们可以修改为:@WebAppConfiguration(“src/main/resources”)。

45.@EnableAutoConfiguration

解析:此注释自动载入应用程序所需的所有Bean——这依赖于Spring Boot在类路径中的查找。该注解组合了@Import注解,@Import注解导入了EnableAutoCofigurationImportSelector类,它使用SpringFactoriesLoader.loaderFactoryNames方法来扫描具有META-INF/spring.factories文件的jar包。而spring.factories里声明了有哪些自动配置。

46.@SpingBootApplication

解析:SpringBoot的核心注解,主要目的是开启自动配置。它也是一个组合注解,主要组合了@Configurer,@EnableAutoConfiguration(核心)和@ComponentScan。可以通过@SpringBootApplication(exclude={想要关闭的自动配置的类名.class})来关闭特定的自动配置。

47.@ImportResource

解析:虽然Spring提倡零配置,但是还是提供了对xml文件的支持,这个注解就是用来加载xml配置的。例:@ImportResource({“classpath:/resourse/application*.xml})

48.@ConfigurationProperties

将properties属性与一个Bean及其属性相关联,从而实现类型安全的配置。

用法实例

@ConfigurationProperties(prefix=”authot” locations={“classpath:/resourse/application*.xml})

49.@ConditionalOnBean

解析:条件注解。当容器里有指定Bean的条件下。

用法实例:

@Configurationpublic class VanConfig { /@Bean @ConditionalOnBean(Billy.class) public Fighter fighter(){ return new Billy(); }/ @Bean @ConditionalOnMissingBean public Fighter fighter2(){ return new Babana(); }}

50.@ConditionalOnClass

解析:条件注解。当类路径下有指定的类的条件下。

参考:https://www.cnblogs.com/qdhxhz/p/11027546.html

51.@ConditionalOnExpression

解析:条件注解。基于SpEL表达式作为判断条件。

用法实例:

@ConditionalOnExpression("‘true") 当括号中的内容为true时,使用该注解的类被实例化,支持语法如下: @ConditionalOnExpression("KaTeX parse error: Expected 'EOF', got '&' at position 25: …mer.enabled}==1&̲&{rabbitmq.comsumer.enabled:true}") @ConditionalOnExpression("’${mq.comsumer}’.equals(‘rabbitmq’)")

52.@ConditionalOnJava

解析:条件注解。基于JVM版本作为判断条件。

参考:https://blog.csdn.net/AlbertFly/article/details/88315314

53.@ConditionalOnJndi

解析:条件注解。在JNDI存在的条件下查找指定的位置。

参考同上

54.@ConditionalOnMissingBean

解析:条件注解。当容器里没有指定Bean的情况下。

参考同上

55.@ConditionalOnMissingClass

解析:条件注解。当类路径下没有指定的类的情况下。

参考同上

56.@ConditionalOnNotWebApplication

解析:条件注解。当前项目不是web项目的条件下。

参考同上

57.@ConditionalOnResource

解析:条件注解。类路径是否有指定的值。

参考同上

58.@ConditionalOnSingleCandidate

解析:条件注解。当指定Bean在容器中只有一个,后者虽然有多个但是指定首选的Bean。

参考同上

59.@ConditionalOnWebApplication

解析:条件注解。当前项目是web项目的情况下。

参考同上

60.@EnableConfigurationProperties

解析:注解在类上,声明开启属性注入,使用@Autowired注入。例:@EnableConfigurationProperties(HttpEncodingProperties.class)。

参考:https://blog.csdn.net/tales522/article/details/87710932

61.@AutoConfigureAfter

解析:在指定的自动配置类之后再配置。例:@AutoConfigureAfter(WebMvcAutoConfiguration.class)

参考:https://blog.csdn.net/yangchao1125/article/details/100934881

62.@Qualifier

解析:当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者

使用案例:

@Autowired @Qualifier(value = “demoInfoService”)private DemoInfoService demoInfoService;

63.JAP注解

1.@Entity

解析:必须与@Id注解 结合使用,否则 报错为: No identifier specified for entity:

name 属性

(可选)实体名称。 缺省为实体类的非限定名称。

​ 该名称用于引用查询中的实体。

​ 该名称不能是Java持久性查询语言中的保留字面值。

不与@Table结合的话 表名 默认为 SnakeCaseStrategy(命名策略 )为表名

若使用 name属性 且没有与@Table结合 则表名为 name值的SnakeCaseStrategy(命名策略 )

例如:

@Entity public class UserEntity{…} 表名 user_entity @Entity(name=“UE”) public class UserEntity{…} 表名 ue @Entity(name=“UsEntity”) public class UserEntity{…} 表名 us_entity

参考:https://blog.csdn.net/sunrainamazing/article/details/80783074

2.@MappedSuperClass

解析:直译就是映射父类,就是用来标识父类实体类

基于代码的可复用性,抽象化思想,在项目开发中使用JPA的@MappedSuperclass注解将实体类的多个属性分别封装到不同的非实体类中

例如,数据库表中都需要id来表示主键,创建时间,创建者,等等这些映射实体类的通用的属性,交给jpa统一生成主键id编号,那么使用一个父类来封装这些通用属性,并用@MappedSuperclas标识

参考:https://blog.csdn.net/Chen_RuiMin/article/details/104216066

3.@NoRepositoryBean

解析:相当于你在使用spring data jpa 的时候,每个实体类有需要实现的相同的方法,就可以单独抽取出来,放在一个公共的接口MyRepository中,并这个类继承了jpa的相关Repository接口或类,由MyRepository接口来衔接jpa的相关操作,其他实体类需要实现的操作就直接继承MyRepository接口,不用每次都去继承jpa的相关接口或类啦,所以这个公共接口就需要这个注解@NoRepositoryBean来标识

参考:https://blog.csdn.net/qq_39818325/article/details/86653947

4.@Column

解析:如果字段名与列名相同,则可以省略。

5.@Id

解析:表示该属性为主键。

6.@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”)

解析:表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。

7.@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1)

解析:name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。

8.@Transient

解析:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为

9.@Basic

解析:@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式

10.@JsonIgnore

解析:作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。

11@JoinColumn(name=”loginId”)

解析:一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。

12.@OneToOne、@OneToMany、@ManyToOne

解析:对应hibernate配置文件中的一对一,一对多,多对一

64.SpringMVC

1.@params

解析:指定request中必须包含某些参数值是,才让该方法处理。headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。value:指定请求的实际地址,指定的地址可以是URI Template 模式method:指定请求的method类型, GET、POST、PUT、DELETE等consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

2.@RequestParam

解析:用在方法的参数前面。@RequestParam String a =request.getParameter(“a”)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AcerMr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值