Spring、SpringMVC、SpringBoot常用注解

一、Spring 的常用注解

Spring 中使用注解需要先添加配置文件,告知spring框架,在读取配置文件,创建容器时扫描包,依据注解创建对象,并存入容器中 

 

 1、用于创建对象

(1)、以下四个注解的作用及属性都是一模一样的,都是针对一个的衍生注解只不过是提供了更加明确的语义化。

作用:

都是把资源交给spring来管理,相当于:

属性:

value:指定bean的id;如果不指定value属性,默认bean的id是当前类的类名,首字母小写;

(1)@Controller

一般用于表现层。

(2)@Service

一般用于业务层。

(3)@Repository

一般用于持久层。

(4)@Component

通用,通常用于三层架构之外。

(5)@Scope

  • 作用:

    指定bean的作用域范围。

  • 属性:

    value:指定范围的值,singleton prototype request session。

  2、用于属性注入

以下四个注解的作用相当于:

(1)@Autowired

  • 作用:

    自动按照类型注入。set方法可以省略

(2)@Resource

  • 作用:

    自动按照名字注入。set方法可以省略。   

  • 属性:

         name:指定bean的id。

 (3)@Value

  • 作用:

    注入基本数据类型和String类型数据的

  • 属性:

      value:用于指定值

 3、AOP注解

li在Spring项目中要先进行配置,开启spring对注解AOP的支持


  • @Aspect:把当前类声明为切面类

  • @Before:前置通知,可以指定切入点表达式

  • @AfterReturning:后置【try】通知,可以指定切入点表达式

  • @AfterThrowing:异常【catch】通知,可以指定切入点表达式

  • @After:最终【finally】通知,可以指定切入点表达式

  • @Around:环绕通知,可以指定切入点表达式

 二、SpringMVC 的常用注解

1、RequestMapping注解

  • 作用:用于建立请求URL和处理请求方法之间的对应关系。

  • 出现位置:

  • 类上:

    请求 URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理,例如:

    账户模块:

    /account/add

    /account/update

    /account/delete ...

    订单模块:

    /order/add

    /order/update

    /order/delete

    红色的部分就是把RequsetMappding写在类上,使我们的URL更加精细。

  • 方法上:

    请求URL的第二级访问目录,可以窄化请求路径

  • 属性:

    value:用于指定请求的URL。它和path属性的作用是一样的。

    method:用于指定请求的方式。

    注意:以上属性只要出现2个或以上时,他们的关系是与的关系。

窄化路径案例:

@Controller
@RequestMapping("@Controller
@RequestMapping("/account")//一级路径
public class AccountController {
	//指定的请求方式
    @RequestMapping(value = "/findAccount1", method = RequestMethod.POST)//二级路径
    public ModelAndView findAccount1() {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "欢迎你 springmvc");
        mv.setViewName("success");
        return mv;
    }
}")
public class AccountController {
	//指定的请求方式
    @RequestMapping(value = "/findAccount1", method = RequestMethod.POST)
    public ModelAndView findAccount1() {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "欢迎你 springmvc");
        mv.setViewName("success");
        return mv;
    }
}

2、@GetMapping("/请求路径")

       同RequestMapping差不多相同,将它添加到控制器方法上,并指定所需的URL路径即可

只可将 HTTP Get 请求映射到指定的处理方法上。


3、@PutMapping("/请求路径") 

       同RequestMapping差不多相同,将它添加到控制器方法上,并指定所需的URL路径即可

只可将 HTTP PUT 请求映射到指定的处理方法上。

4、@PathVaribale

映射 URL 绑定的占位符
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx”) 绑定到操作方法的入参中。

(1)、若方法参数名称和需要绑定的url中变量名称一致时,可以简写:

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

(2)、若方法参数名称和需要绑定的url中变量名称不一致时,写成:

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

  5、@RequestBody

         作用:接收前端ajax传递给后端的json字符串,并将json格式的数据转为java对象。

 6、@ResponseBody

        作用:将java对象转为json格式的数据传递给前台ajax。

三、Spring Boot 的常用注解

1、@Configuration:

  • 作用:用于指定当前类是一个spring配置类,可替换xml配置文件,作用和在spring的xml配置文件中的:是一样的。当从一个类上加载到该注解时会创建spring容器。

2、@ComponentScan

  • 作用:用于指定spring在初始化容器时要扫描的包。作用和在spring的xml配置文件中的:

    是一样的。

  • 属性:basePackages:用于指定要扫描的包。和该注解中的value属性作用一样。

例:

/**
 * spring的配置类
 */
@Configuration
@ComponentScan(basePackages = "com.by")//等价于
public class SpringConfiguration{
}

3、@Bean

  • 作用:该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。作用和在spring的xml配置文件中的:是一样的。

  • 属性:

    name:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。

4、@PropertySource

  • 作用:

    用于加载*.properties文件中的配置。作用和在spring的xml配置文件中的:是一样的。

  • 属性:

    value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath: 

例:

#config.properties
nam=二狗
age=18
@PropertySource("classpath:config.properties")
public class SpringConfiguration {

    @Value("${nam}")
    private String nam;
    @Value("${age}")
    private Integer age;

    @Bean
    public Dog dog(){
        Dog dog = new Dog();
        dog.setNam(nam);
        dog.setAge(age);
        return dog;
    }
}

 5、@Import

  • 作用:@Import注解是用来导入配置类或者一些需要前置加载的类。作用和在spring的xml配置文件中的:是一样.

  • 属性:

    value[]:用于指定其他配置类的字节码(.class)。

 6、@ControllerAdvice

      用来声明一些全局性的东西,最常见的是结合@ExceptionHandler注解用于全局异常的处理。

7、@ExceptionHandler

     可以用来统一处理方法抛出的异常,当我们使用这个@ExceptionHandler注解时,我们需要定义一个异常的处理方法,比如下面的handleExeption2()方法,给这个方法加上@ExceptionHandler注解,这个方法就会处理类中其他方法(被@RequestMapping注解的)抛出的异常。

@ExceptionHandler()
public String handleExeption2(Exception ex) {
    System.out.println("抛异常了:" + ex);
    ex.printStackTrace();
    String resultStr = "异常:默认";
    return resultStr;
}

(1)@ExceptionHandler注解中可以添加参数,参数是某个异常类的class,代表这个方法专门处理该类异常,例:

@ExceptionHandler(NumberFormatException.class)
public String handleExeption(Exception ex) {
    System.out.println("抛异常了:" + ex);
    ex.printStackTrace();
    String resultStr = "异常:NumberFormatException";
    return resultStr;
}

8、 @SpringBootApplication

       标识该类是一个启动器类

9、@RunWith

        是一个运行器

        例:@RunWith(SpringJUnit4ClassRunner.class)

        让junit与spring环境进行整合,让测试运行于Spring 环境


10、@Contextconfiguartion

        整合JUnit4测试时,使用注解引入多个配置文件,当一个类添加了注解@Component,那么他就自动变成了一个bean,就不需要再Spring配置文件中显示的配置了。把这些bean收集起来通常有两种方式,Java的方式和XML的方式。当这些bean收集起来之后,当我们想要在某个测试类使用@Autowired注解来引入这些收集起来的bean时,只需要给这个测试类添加@ContextConfiguration注解来标注我们想要导入这个测试类的某些bean。

     例:

1、单个文件 
@ContextConfiguration(Locations="../applicationContext.xml")  

@ContextConfiguration(classes = SimpleConfiguration.class)


2、多个文件时,可用{}

@ContextConfiguration(locations = { "classpath*:/spring1.xml", "classpath*:/spring2.xml" })


3、扫描所有
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:/*.xml"})
public class CDPlayerTest {

}

@ContextConfiguration括号里的locations = {"classpath*:/*.xml"}就表示将class路径里的所有.xml文件都包括进来,那么刚刚创建的那么XML文件就会包括进来,那么里面自动扫描的bean就都可以拿到了,此时就可以在测试类中使用@Autowired注解来获取之前自动扫描包下的所有bean

classpath和classpath*区别:

classpath:只会到你的class路径中查找找文件。

classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。

11、 @MapperScan

用户扫描MyBatis的Mapper接口

例:

@SpringBootApplication
@MapperScan("com.by.mapper") // @MapperScan 用户扫描MyBatis的Mapper接口
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}

12、@Transactional

      声明事务管理,用在接口实现类或接口实现方法上,当调用一个用@Transactional注解的方法时,Spring Boot使用TransactionManager来创建一个新的事务或加入一个已有的事务。TransactionManager然后管理事务的生命周期,包括根据事务操作的成功或失败来提交或回滚事务。

13、@SpringBootTest

@SpringBootTest(classes = 启动类名称.class)
使用SpringBoot 测试类可在不需要启动程序时,即可使用。当你运行你的测试方法时他会自己启动程序调用所需使用到的mapper,service接口,实现方法。故而可在测试类中像编写正常service方法一样编写代码。基本等同于启动了整个服务,此时便可以开始功能测试。
注:
1)如果注解@SpringBootTest(classes = 启动类名称.class)中配置了项目启动类,则该测试类可以放在test.java下任何包中
2)如果注解@SpringBootTest没有配置里面的参数classes = Application.class,则需要确保test.java下的测试类包与启动类所在的包一致,即在test.java下也需要创建com.xunan.demo包,并将测试类放在该包下。

你可能感兴趣的:(spring,spring,boot,java)