-
Notifications
You must be signed in to change notification settings - Fork 0
Spring Boot Essence
Johnson Fu edited this page Aug 4, 2019
·
11 revisions
https://github.com/quantificial/springboot-book-essence
AOP
@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
}
- freemarker
- thymeleaf
- JMX (jconsole)
- ZeroMQ
- microk8s
- multipass
- pwsh (powershell)