@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 打包时跳过单元测试
}
}