zoukankan      html  css  js  c++  java
  • 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文件,就输出成为:

      

  • 相关阅读:
    1407251735-hd-美素数.cpp
    [Javascript] IO Functor
    [AngularJS] Test an Angular Component with $componentController
    [AngularJS] Isolate State Mutations in Angular Components
    [Jest] Track project code coverage with Jest
    [Javascript] Either Functor
    [Javascript] Maybe Functor
    [AngualrJS] ng-strict-di
    [Ramda] Simple log function for debugging Compose function / Using R.tap for logging
    [Jest] Test JavaScript with Jest
  • 原文地址:https://www.cnblogs.com/yulianggo/p/10467577.html
Copyright © 2011-2022 走看看