Skip to content

Spring Boot Essence

Johnson Fu edited this page Aug 4, 2019 · 11 revisions

Quick Start

https://github.com/quantificial/springboot-book-essence

Code Snippet

AOP

https://blog.csdn.net/javazejian/article/details/56267036#%E7%AE%80%E5%8D%95%E6%A1%88%E4%BE%8B%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8

	@Around("@within(org.springframework.stereotype.Controller) ")
	public Object simpleAop(final ProceedingJoinPoint pjp) throws Throwable {
		try {
			Object[] args = pjp.getArgs();
			System.out.println("args:" + Arrays.asList(args));
			Object o = pjp.proceed();
			System.out.println("return :" + o);
			return o;

		} catch (Throwable e) {
			throw e;
		}
	}


@Aspect
public class MyAspect {

    /**
     * 前置通知
     */
    @Before("execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))")
    public void before(){
        System.out.println("前置通知....");
    }

    /**
     * 后置通知
     * returnVal,切点方法执行后的返回值
     */
    @AfterReturning(value="execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))",returning = "returnVal")
    public void AfterReturning(Object returnVal){
        System.out.println("后置通知...."+returnVal);
    }


    /**
     * 环绕通知
     * @param joinPoint 可用于执行切点的类
     * @return
     * @throws Throwable
     */
    @Around("execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("环绕通知前....");
        Object obj= (Object) joinPoint.proceed();
        System.out.println("环绕通知后....");
        return obj;
    }

    /**
     * 抛出通知
     * @param e
     */
    @AfterThrowing(value="execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))",throwing = "e")
    public void afterThrowable(Throwable e){
        System.out.println("出现异常:msg="+e.getMessage());
    }

    /**
     * 无论什么情况下都会执行的方法
     */
    @After(value="execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))")
    public void after(){
        System.out.println("最终通知....");
    }
}

Controller

@RequestMapping("/endpoint") // define end point
@Function()
public @ResponseBody String say(String name){
	return "hello "+name;
}

@GetMapping("/abc") // define endpoint for different http request
@PostMapping("/abc")
@PutMapping("/abc")
@DeleteMapping("/abc")
@PatchMapping("/abc")

@GetMapping(value="/consumes/a.json",consumes="application/json") // specify to allow to consume json only
$.ajax({
  type: "get",
  url: "/consumes/a.json",
  contentType: "application/json",
  ...
});

@PostMapping(path = "/update.json", params = "action=save") // specify the required params

@PostMapping(path = "/update.json", headers = "action=save") // specify the required headers

@GetMapping(path = "/{userId}.json", produces = "application/json")
@ResponseBody
public   User getUserById( @PathVariable Long userId) {} // use @PathVarible to map url variable

@GetMapping(path = "/{id}.json", produces = "application/json") // use @PathVariable to map url variable
@ResponseBody
public   User getUserById( @PathVariable("id") Long userId) {}

Useful Annotation for bean

// PostConstruct after Spring init
@PostConstruct
public void init() {}
// call the method before the bean has been destroyed
@PreDestroy
public void cleanUp() {}

// Qualifier to reference the bean
@Service
@Qualifier("apple")
public class ExampleBean() {}

@Service
public AnotherBean() {
@Qualifier("apple") ExampleBean bean
}

Resources

  • freemarker
  • thymeleaf
  • JMX (jconsole)
  • ZeroMQ
  • microk8s
  • multipass
  • pwsh (powershell)
Clone this wiki locally