Springboot 注解使用

@SpringBootApplication

1.是SpringBootConfiguration+EnableAutoConfiguration+ComponentScan的集合

//表示排除DataSourceAutoConfiguration自动配置这一项
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })

@ComponentScan

1.@ComponentScan用于类或接口上主要是指定扫描路径,spring会把指定路径下带有指定注解的类注册到IOC容器中

2.会被自动装配的注解包括@Controller、@Service、@Component、@Repository等等

3.其作用等同于<context:component-scan base-package="com.maple.learn" />配置

@RestController  REST风格的控制器

1.@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直接填入HTTP响应体中,是REST风格的控制器

 //表示这是一个REST风格的控制器
@RestController
@RequestMapping(value = "/testtwo") 
public class HelloController {
}

@RequestMapping 请求映射

1.@RequestMapping(value="/hello",method=RequestMethod.GET) 注解使用

//表示请求地址为deviceslist的接口

@RequestMapping("/deviceslist")
public TableDataInfo list(JlDevice jlDevice)
{
 
List<JlDevice> list = jlDeviceService.selectJlDeviceList(jlDevice);
return getDataTable(list);
}

 @PropertySource

1.指定引入某个文件

2.这是java配置的写法

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfiguration {

    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driverClassName}")
    String driverClassName;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

@Value()  获取值

@Value("${jdbc.url}")
String url;

@Autowired 注入

1.作用注入bean

2.通过@Autowired把接口或者类自动注入到SpringBoot容器中

    @Autowired
    private IWeixiuService weixiuService;

 @ConfigurationProperties

1.@ConfigurationProperties(prefix = "jdbc")表示从application.yml文件中获取前缀是jdbc的配置信息

 @ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
    private String url;
    private String driverClassName;
    private String username;
    private String password;
    // ... 略
    // getters 和 setters
}

@Configuration 

1.声明这个类为Java配置类

 @Bean

1.作用:注册Bean,配置类注入一个对象

2.@Bean 需要在配置类中使用,即类上需要加上@Configuration注解

3.可以通过@Autowired装配


@Configuration
public class WebSocketConfig {
    @Bean
    public Student student(){
        return new Student();
    }

}

 

 @EnableConfigurationProperties

1.通过@EnableConfigurationProperties(JdbcProperties.class)来声明要使用JdbcProperties这个类的对象

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {

    @Autowired
    private JdbcProperties jdbcProperties;

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(jdbcProperties.getUrl());
        dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
        dataSource.setUsername(jdbcProperties.getUsername());
        dataSource.setPassword(jdbcProperties.getPassword());
        return dataSource;
    }

}

@Component

1.作用:注册Bean

2.@Compent 作用就相当于 XML配置

3.可以通过@Autowired装配

@Component
public class Student {

    private String name = "lkm";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

@Valid 校验某个值

1.要配合BindingResult bindingResult方法使用
2.在domain实体类的get方法前加@Min注解

    //@Min注解是给属性值一个最小值,如果小于最小值给出一个message提示
    @Min(value = 18,message = "未成年少女不可入内")
    public Integer getAge() {
        return age;
    }

在控制类中加@Valid校验注解

//定义一个post方法,设置两个参数,与数据库中参数值要对应
    @RequestMapping(value = "/addgirl",method = RequestMethod.POST)
    public Girl addgirl(@Valid Girl girl, BindingResult bindingResult){
        //不写获取参数的@RequestParma注解,直接写一个对象,通过对象的get方法获取参数值。如果属性值很多就写入girl实体类中就行。
        //@Valid注解 验证age小于18时会报错,接收并打印错误,同时返回null
        if(bindingResult.hasErrors()){
            System.out.println(bindingResult.getFieldError().getDefaultMessage());
            return null;
        }
        //设置cupsize和age的值
        girl.setCupSize(girl.getCupSize());
        girl.setAge(girl.getAge());
        //调girlRep接口的save方法,往数据库中插入值,并同时返回插入的值信息
        return girlRep.save(girl);
    }

@Pointcut 注解,切入点注解,从哪个类开始切入使用AOP统一处理技术,
@Before和@After注解中都写入("log()")示例代码如下:

    //为了使代码更简单,可以这样写,使用@Pointcut注解
//    @Before("execution(public * com.imooc.controller.GirlController.*(..))")
    @Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
    public void log(){
    }

    //@Before注解可以这样写,调用方法之前先调用log()方法
    @Before("log()")
    public void doBefore(){
        System.out.println("执行方法前,使用Aop统一处理日志");
    }

    //在方法执行完后打印日志
//    @After("execution(public * com.imooc.controller.GirlController.*(..))")
    @After("log()")
    public void doAfter(){
        System.out.println("执行方法后,使用Aop统一处理日志");
    }

@AfterReturning注解

    //获取接口返回的内容
    //使用@AfterReturning注解,获取目标方法返回的参数,目标方法返回的是object对象
    @AfterReturning(returning = "object",pointcut = "log()")
    public void doAfterReturining(Object object){
        logger.info("returning={}",object);
    }

@Entity注解、@Table(name = "Girls")

//@Entity:@Table(name="") 表明这是一个实体类,一般和jpa配合着使用,如果实体类名称和数据库名称一致,@Table注解可以省略
//此注解代表要生成一个Girls数据表
@Entity
@Table(name = "Girls")
public class Girl {

@Service 代表是service层的意思


/*
service层写业务逻辑
 */
@Service
public class GirlService {

    //通过@Autowired注解把GirlRep接口注入Spirng容器中,同时带入Girl实体类
    @Autowired
    public GirlRep girlRep;

    //在service层添加@Transactional注解可以有效控制事务
    @Transactional
    public void interTwo(){
        Girl girlone=new Girl();
        girlone.setAge(33);
        girlone.setCupSize("BBBBBBBBBB");

        Girl girltwo=new Girl();
        girltwo.setAge(34);
        girltwo.setCupSize("D");

        girlRep.save(girlone);
        girlRep.save(girltwo);
    }

}

//在service层添加@Transactional注解可以有效控制事务

//@ControllerAdvice注解,包含@component组件,可以被扫描到统一捕获和处理异常
@ExceptionHandler(Exception.class)注解:用在方法上面表示遇到这个异常就执行以下方法
示例代码如下:

package com.imooc.handle;

/*
此类主要用来接收和处理异常
 */

import com.imooc.domain.Result;
import com.imooc.utils.ResultUtil;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

//@ControllerAdvice注解,包含@component组件,可以被扫描到统一捕获和处理异常
@ControllerAdvice
public class ExceptionHandle {

    //@ExceptionHandler(Exception.class)注解:用在方法上面表示遇到这个异常就执行以下方法
    //@ResponseBody因为处理的是返回结果的异常,所以加一个@ResponseBody

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result Handle(Exception e){
        //返回统一日志处理类中的error方法,错误码是100,错误信息是e.getMessage(),获取异常信息
        //ResultUtil.error方法返回的类型就是Result类型,所以Handle方法返回的类型也是Result
        return ResultUtil.error(100,e.getMessage());
    }
}

@RunWith注解是指测试运行器,告诉程序是什么环境下的测试,目前参数是SpringRunner是指在Spring环境下的测试
**@SpringBootTest **启动整个SpringBoot的工程

package com.imooc;

import com.imooc.domain.Girl;
import com.imooc.service.GirlService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;

/*
测试GirlService类
 */

//@RunWith注解是指测试运行器,告诉程序是什么环境下的测试,目前参数是SpringRunner是指在Spring环境下的测试
//@SpringBootTest 启动整个SpringBoot的工程
@RunWith(SpringRunner.class)
@SpringBootTest
public class GirlServiceTest {
    //注入GirlService类,下面会使用该类中的方法
    @Autowired
    GirlService girlService;

    @Test
    public void findoneTest(){
        Girl girl=girlService.findone(8);
        //断言,判断age值是否与预期的值相等
        Assert.assertEquals(new Integer(31),girl.getAge());
    }
}

@AutoConfigureMockMvc //该注解是指使用mockmvc测试

package com.imooc.controller;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

import static org.junit.Assert.*;

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc //该注解是指使用mockmvc测试
public class GirlControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void getgirlslist() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/getgirlslist")).
                andExpect(MockMvcResultMatchers.status().isOk()).
                andExpect(MockMvcResultMatchers.content().string("777"));
        //andExpect方法中有很多判断的方法


        //在命令行中输入:mvn clean package 打包
        //mvn clean package -Dmaven.test.skip=true 打包时跳过单元测试

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值