spring boot中的IOC和AOP

 IOC

  控制反轉,它表示讓容器管理對象,不用每次都本身取new對象。使用@Service和@Autowired提供和使用服務。session

  例如:建立一個service包,其中第一deal類app

1 //@Service表示提供控制反轉服務
2 @Service
3 public class deal {
4     public String show()    {
5         return "i show everything";
6     }
7  }

  其它地方,只須要聲明變量便可,不用new,比較簡單。例如:ui

1     @Autowired
2     private deal sss ;
3     @RequestMapping(path = {"/hello"})
4     @ResponseBody
5     public String Hello_World()    {
6         return "show: " + sss.show();
7         }    

  顯示結果:spa

  

 AOP

  切面監控,能夠監控任何文件,目前廣泛用於日誌。日誌

  例如,創建一個aspect包,建立一個LogAspect類:code

 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變量並使用:blog

 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文件,就輸出成爲:get

  

相關文章
相關標籤/搜索