首页 > 其他分享 >Spring,SpringMVC,Spring Boot中常见注解(持续更新)

Spring,SpringMVC,Spring Boot中常见注解(持续更新)

时间:2023-07-28 15:06:19浏览次数:27  
标签:SpringMVC Spring SpringBootApplication 配置 Boot Controller 注解 方法

在学习Java框架时,注解的学习是必不可少的,这篇文章就来记录一下这些框架中的常用注解

(常用注解)

一,spring

1.声明bean的注解

@Component 组件,没有明确的角色

@Service 在业务逻辑层使用(service层)

@Repository 在数据访问层使用(dao层)

@Controller 在展现层使用,控制器的声明(C)

2.注入bean的注解

@Autowired:由Spring提供

@Inject:由JSR-330提供

@Resource:由JSR-250提供

都可以注解在set方法和属性上,推荐注解在属性上(一目了然,少写代码)。

3.3.java配置类相关注解

@Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上)

@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)

@Configuration 声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(类上)

@ComponentScan 用于对Component进行扫描,相当于xml中的(类上)

@WishlyConfiguration 为@Configuration与@ComponentScan的组合注解,可以替代这两个注解

4.切面(AOP)相关注解

Spring支持AspectJ的注解式切面编程。

@Aspect 声明一个切面(类上) 使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。

@After 在方法执行之后执行(方法上)

@Before 在方法执行之前执行(方法上)

@Around 在方法执行之前与之后执行(方法上)

@PointCut 声明切点 在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持(类上)

二,Spring MVC

@EnableWebMvc 在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。

@Controller 声明该类为SpringMVC中的Controller

@RequestMapping 用于映射Web请求,包括访问路径和参数(类或方法上)

@ResponseBody 支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上)

@RequestBody 允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前)

@PathVariable 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。

@RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。

@ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上, 这对所有注解了 @RequestMapping的控制器内的方法有效。

@ExceptionHandler 用于全局处理控制器里的异常

@InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。

@ModelAttribute 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对。

三,springboot

1.@SpringBootApplication

放置在Springboot启动类上,表明该类是开启Springboot容器的入口 @SpringBootApplication是一个"三体"结构,重要的只有三个Annotation:下文:

1.1@SpringBootConfiguration

继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。

1.2@EnableAutoConfiguration

它的作用启动自动的配置,@EnableAutoConfiguration注解的意思就是Springboot根据你添加的jar包来配置你项目的默认配置,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvc和tomcat,就会自动的帮你配置web项目中所需要的默认配置

1.3@ComponentScan

扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。是以前的context:component-scan(以前使用在xml中使用的标签,用来扫描包配置的平行支持)。所以本demo中的User为何会被spring容器管理。本质上等于context:component-scan配置

SpringBootApplication参数详解

1.scanBasePackages

@SpringBootApplication只会扫描@SpringBootApplication注解标记类包下及其子包的类(特定注解标记,比如说@Controller,@Service,@Component,@Configuration和@Bean注解等等)纳入到spring容器,如果我们定义的Bean不在@SpringBootApplication注解标记类相同包下及其子包的类,所以需要我们去配置一下扫包路径。

修改启动类,@SpringBootApplication(scanBasePackages = "com.xxx.xxx"),指定扫描路径:

当然使用@SpringBootApplication(scanBasePackageClasses = MyConfig.class),指定scanBasePackageClasses参数的value值是你需要扫描的类也可以,结果一样,不过如果多个配置类不在当前包及其子包下,则需要指定多个。

2.exclude或excludeName

在上面的列子的相同包下(com.xxx.xxx)配置的bean,都会纳入到spring容器中(@Component),我们知道@SpringBootApplication注解会扫描当前包及其子包如果我们需要将其排除在spring容器中,可以使用@SpringBootApplication的另外二个参数(exclude或excludeName)

@SpringBootApplication(excludeName = {"com.xxx.xxx.类名"})

2.@Import

这是 Spring 3.0 添加的新注解,用来导入一个或者多个 @Configuration 注解修饰的类,这在 Spring Boot 里面应用很多。

@Import({User.class, DBHelper.class})
 *      给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
 * ```


@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
}````

3.@Conditional

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

4.@ConditionalOnBean

组合 @Conditional 注解,当容器中有指定的 Bean 才开启配置。

5.@ConditionalOnMissingBean

组合 @Conditional 注解,和 @ConditionalOnBean 注解相反,当容器中没有指定的 Bean 才开启配置。

标签:SpringMVC,Spring,SpringBootApplication,配置,Boot,Controller,注解,方法
From: https://blog.51cto.com/u_16202308/6882847

相关文章

  • Spring batch 2.0例子(lineMapper)
    http://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/使用SpringBatch构建企业级批处理应用:第1部分刘光瑞,软件架构师,四达软件刘光瑞,现供职于北京四达软件担任软件架构师,长期从事基于Swing的企业级胖客户端应用程序开发,精通多种Swing开发框......
  • spring features
     http://www.springsource.org/featuresModernWebCompletesupportformodernapplicationsincludingREST,HTML5,conversationsandAJAX.Seemore...DataAccessSupportstraditionalRDBMSaswellasnewNoSQLsolutions,map-reduceframeworksandcloudbased......
  • idea启动springboot 出现找不到符号,但是类是明确存在的
     很多小伙伴应该都遇到过这个问题,依赖没问题,对应的类也存在但是启动的时候就报错(通常这种问题是突然就发生,上一次启动还是好好的)错误原因:一般是由于依赖的子模块进行了修改,没有install到本地仓库执行mvninstall之类的命令就可以了解决办法,mvnclean ->mvninstall......
  • spring-boot 打包 配置、lib、脚本分开 的maven配置
    <profiles><profile><id>dev</id><properties><spring.profiles.active>dev</spring.profiles.active></properties></profile>......
  • Spring Data JPA 3.X集成Querydsl
    2.X集成方式参考官方文档,querydsl/querydsl-jpaatmaster·querydsl/querydsl(github.com),集成方式比较简单pom.xml添加query的依赖,包括querydsl-jpa依赖和apt-maven-pluginmaven插件<!--依赖--><dependency><groupId>com.querydsl</groupId><artifactId>......
  • org.springframework.beans.factory.parsing.BeanDefinitionParsingException
    org.springframework.beans.factory.parsing.BeanDefinitionParsingException:Configurationproblem:Failedtoimportbeandefinitionsfromrelativelocation[spring-controller.xml]Offendingresource:classpathresource[applicationContext.xml];nestedexcep......
  • Spring boot gradle docker plugin 使用
    Springbootgradledockerplugin使用Springbootgradledockerplugin使用前言增加GradleDocker插件使用GradleDocker插件DockerFile运行docker指令生成DockerImage使用IDEA运行docker指令前言当前容器技术、微服务、JVM语言等新的技术正在快速的占领着Java开发市场,J......
  • 策略模式+Spring配置类优化多if..else思路
    图示1.现状场景:假设设备上报不同类型的消息,我们要对不同类型的消息做不同的处理。如果我们通过if..else的方式处理的话会显得比较冗余。例如:if("alarmEvent".equals(msg)){//处理告警消息逻辑...}elseif("deviceBase".equals(msg)){//处理设备上报的基本......
  • SpringCloud的注册和发现
    什么是微服务架构,为什么要用将原本属于一个项目的根据业务划分模块,部署到不同的服务器上,通过接口相互调用。好处:如果部署在一台服务器上,服务器崩溃后所有功能都不能使用。如果使用的时微服务架构,一个服务器崩了,不会对另一个模块造成很大影响每个微服务项目复杂性低技术更新迭......
  • springMVC Interceptor 拦截器
    1.springMVCInterceptor拦截器2.Filter和Interceptor比对3.HandlerInterceptor接口方法的作用及其参数、返回值详解4.springMVC拦截器执行顺序 ......