水木告白工作室:Java从零入门之模仿头条资讯(三)
本人的学习笔记,仅用于学习,如有侵权,请告知,谢谢!转发请注明出处!
DAO(Data Access Object)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。
Service层:Service层主要负责业务模块的逻辑应用设计。同样是首先设计接口,再设计其实现的类,接着再Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。Service层的业务实现,具体要调用到已定义的DAO层的接口,封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。
- Controller层: Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。
- View层:此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示,
DAO层,Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势,Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。
- SpringBoot工程
- 从http://start.spring.io/下载代码添加模板;
- controller
- service
- 参数解析
- HttpMethod
- Thymeleaf
注意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>
- Request/Response/Session
- Request
- 参数解析
- cookie读取
- http请求字段
- 文件上传
- Response
- 页面内容返回
- cookie下发
- http字段设置,headers
- Request
- Error/重定向
- 重定向
- 301:永久转移
- 302:临时转移
- 错误
- //SpringMVC外的Exception或SpringMVC没有处理的Exception
- 重定向
- Logger
- Ioc :控制反转
控制反转(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!"; } }
- AOP/Aspect
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 控制器(注入服务)
- 用于标注控制层,相当于struts中的action层
2、@service 服务(注入dao)
- 用于标注服务层,主要用来进行业务的逻辑处理
3、@repository(实现dao访问)
- 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
4、@component 注意一定不要忘了加在Aspect 类上!!!(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
)
- 泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。