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文件,就输出成为:

  

猜你喜欢

转载自www.cnblogs.com/yulianggo/p/10467577.html