

DAO(Data Access Object)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。
Service层:Service层主要负责业务模块的逻辑应用设计。同样是首先设计接口,再设计其实现的类,接着再Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。Service层的业务实现,具体要调用到已定义的DAO层的接口,封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。
DAO层,Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势,Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。
注意Thymeleaf的语法结构。
1 <!--index.html--> 2 <!DOCTYPE html> 3 <html lang="en" xmlns:th="http://www.thymeleaf.org"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>pakho</title> 7 </head> 8 <body> 9 <div th:include="/header.html"></div> 10 <div>hello world!</div> 11 <div th:text="${User.name}"></div> 12 </body> 13 </html> 14 15 <!--header.html--> 16 <html xmlns="http://www.w3.org/1999/xhtml" 17 xmlns:th="http://www.thymeleaf.org"> 18 <body> 19 <div> 20 欢迎来到水木告白工作室 21 </div> 22 </body> 23 </html>
控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。
IoC模式,系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。其中一个特点就是通过文本的配置文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。

<!--IndexController--> @Controller public class IndexController { @Autowired private ToutiaoService toutiaoService; @RequestMapping(value = "/page") @ResponseBody public String page(Model model){ return "hello pakho!" + "<br> Say: " + toutiaoService.say(); } } <!--ToutiaoService--> @Service public class ToutiaoService { public String say(){ return "This is a ToutiaoService!"; } }

1 <!--LogAspect--> 2 @Aspect 3 @Component 4 public class LogAspect { 5 public static final Logger logger= LoggerFactory.getLogger(LogAspect.class); 6 @Before("execution(* com.pakho.toutiao.controller.IndexController.*(..))") 7 public void beforeMethod(JoinPoint joinPoint){ 8 logger.info("before method: "); 9 } 10 @After("execution(* com.pakho.toutiao.controller.IndexController.*(..))") 11 public void afterMethod(JoinPoint joinPoint){ 12 logger.info("after method: "); 13 } 14 } 15 16 <!--IndexController--> 17 @Controller 18 public class IndexController { 19 public static final Logger logger= LoggerFactory.getLogger(IndexController.class); 20 21 @Autowired 22 private ToutiaoService toutiaoService; 23 24 @RequestMapping(value = "/page") 25 @ResponseBody 26 public String page(Model model){ 27 logger.info("Visit Index"); 28 return "hello pakho!" + "<br> Say: " + toutiaoService.say(); 29 30 } 31 32 //运行之后 就会在函数执行前和执行后调用before和after函数;
1、@controller 控制器(注入服务)
2、@service 服务(注入dao)
3、@repository(实现dao访问)
4、@component 注意一定不要忘了加在Aspect 类上!!!(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)
原文:https://www.cnblogs.com/thinkinpakho/p/9089933.html