spring boot中的IOC和AOP
IOC
控制反转,它表示让容器管理对象,不用每次都自己取new对象。使用@Service和@Autowired提供和使用服务。
例如:创建一个service包,其中第一deal类
1 //@Service表示提供控制反转服务 2 @Service 3 public class deal { 4 public String show() { 5 return "i show everything"; 6 } 7 }
其它地方,只需要声明变量即可,不用new,比较简单。例如:
1 @Autowired 2 private deal sss ; 3 @RequestMapping(path = {"/hello"}) 4 @ResponseBody 5 public String Hello_World() { 6 return "show: " + sss.show(); 7 }
显示结果:
AOP
切面监控,可以监控任何文件,目前普遍用于日志。
例如,建立一个aspect包,创建一个LogAspect类:
1 //表示這是面向切面的編程 2 @Aspect 3 //用於初始化 4 @Component 5 public class LogAspect { 6 //要使用org.slf4j的庫才行。 7 private static final Logger logger = org.slf4j.LoggerFactory.getLogger(LogAspect.class); 8 //Before表示執行一個文件之前的注解。在執行第一個*表示返回值可以為任意的類型,第二个*表示任何以Controller结束的类。第三個*表示任何方法。 9 @Before("execution(* cn.scu.toutiao.controller.*Controller.*(..))") 10 //JointPoint是將切麵交互進行包裝的類。 11 public void BeforeMethod(JoinPoint joinPoint) { 12 StringBuilder sb = new StringBuilder(); 13 //getArgs獲取所有參數。 14 for (Object str : joinPoint.getArgs()) { 15 sb.append("arg:" + str.toString() + "|"); 16 } 17 logger.info("lala", new Date()); 18 logger.info("yes,before" + sb); 19 } 20 21 @After("execution(* cn.scu.toutiao.controller.indexController.*(..))") 22 public void afterMethod() { 23 logger.info("yes,after"); 24 } 25 }
这样,只要*Controller文件运行,当访问http://127.0.0.1:8080/profile/2/1?key=12334x&type=1时,日志就会打印:
可以在正文中定义Logger变量并使用:
1 private static final Logger logger = org.slf4j.LoggerFactory.getLogger(indexController.class); 2 //ioc,使用容器定义的对象,不用new。 3 @Autowired 4 private deal sss ; 5 6 @RequestMapping(path = {"/hello"}) 7 @ResponseBody 8 public String Hello_World(Model model, 9 HttpSession session) { 10 model.addAttribute("aaa", "naive"); 11 model.addAttribute("l", "<br/>"); 12 List<String> ls = Arrays.asList(new String[] {"1","111", "2323a"}); 13 model.addAttribute("liststring", ls); 14 model.addAttribute("user", new User("aw12")); 15 logger.info("yeah,finally i learn how to use logger"); 16 return "session" + session.getAttribute("msg") + sss.show(); 17 }
这样配合LogAspect文件,就输出成为: