IOC:Java程序员都知道:java程序中的每一个业务逻辑至少须要两个或以上的对象来协做完成,一般,每一个对象在使用他的合做对象时,本身均要使用像new object() 这样的语法来完成合做对象的申请工做。你会发现:对象间的耦合度高了。而IOC的思想是:Spring容器来实现这些相互依赖对象的建立、协调工做。对象只须要关系业务逻辑自己就能够了。从这方面来讲,对象如何获得他的协做对象的责任被反转了(IOC、DI)。IoC的一个重点是在系统运行中,动态的向某个对象提供它所须要的其余对象。这一点是经过DI(Dependency Injection,依赖注入)来实现的, Java 1.3以后一个重要特征是反射(reflection),它容许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是经过反射来实现注入的.前端
AOP:其实依赖注入的思想也很简单,它是经过反射机制实现的,在实例化一个类时,它经过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中.java
AOP就是增长了一种解耦的角度。mysql
解耦,这是 OOP 常常提到的词。为了让各个模块更加独立,有人经过面向对象设计出一堆模式剥离代码下降耦合。
有些人在剥离代码的时候发现不少“方面”的代码有模式可循,但只用面向对象的思想没法优雅的解决。程序员
一个Bean包括id,type,和Properties。
接下来Spring 就开始加载咱们的配置文件了,将咱们配置的信息保存在一个HashMap中,HashMap的key就是Bean 的 Id ,HasMap 的value是这个Bean,只有这样咱们才能经过context.getBean("animal")这个方法得到Animal这个类。咱们都知道Spirng能够注入基本类型,并且能够注入像List,Map这样的类型,接下来就让咱们以Map为例看看Spring是怎么保存的吧 web
流程
一、用户发送请求至前端控制器DispatcherServlet
二、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
三、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(若是有则生成)一并返回给DispatcherServlet。
四、DispatcherServlet调用HandlerAdapter处理器适配器
五、HandlerAdapter通过适配调用具体的处理器(Controller,也叫后端控制器)。
六、Controller执行完成返回ModelAndView
七、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
八、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
九、ViewReslover解析后返回具体View
十、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
十一、DispatcherServlet响应用户spring
原理: 1.读取并解析配置文件 2.读取并解析映射信息,建立SessionFactory3.打开Session 4.建立事务Transation 5.持久化操做 6.提交事务 7.关闭Session 8.关闭SesstionFactorysql
为何要用: 1. 对JDBC访问数据库的代码作了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工做 3. hibernate使用Java反射机制,而不是字节码加强程序来实现透明性。 4. hibernate的性能很是好,由于它是个轻量级框架。映射的灵活性很出色。它支持各类关系数据库,从一对一到多对多的各类复杂关系。数据库
•要链接数据库,须要向java.sql.DriverManager请求并得到Connection对象,该对象就表明一个数据库的链接。
•使用DriverManager的getConnectin(String url , String username ,String password )
•要执行SQL语句,必须得到java.sql.Statement实例,Statement实例分为如下3种类型:
一、执行静态SQL语句。一般经过Statement实例实现。
二、执行动态SQL语句。一般经过PreparedStatement实例实现。
三、执行数据库存储过程。一般经过CallableStatement实例实现。
•执行SQL语句Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
• ResultSet包含符合SQL语句中条件的全部行,而且它经过一套get方法提供了对这些行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:
•关闭JDBC对象:操做完成之后要把全部使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:后端
:拦截器处理过程当中发现目标Action实现了SessionAware接口,便会调用Action中已经实现的setSession(...)方法,将ActionContext中包装的Session注入目标Action中。目标Action也就能够进一步对Session进行操做了。浏览器
背后的机制就是ValueStack。界面经过:username/age/address这样的名称,就可以被直接赋值给user对象,这证实user对象正是ValueStack中的一个root对象!
那么,为何user对象会在ValueStack中呢?它是何时被压入ValueStack的呢?答案是:ModelDrivenInterceptor(关于Interceptor的概念,请参考后续章节的说明)。ModelDrivenInterceptor是缺省的拦截器链的一部分,当一个请求通过ModelDrivenInterceptor的时候,在这个拦截器中,会判断当前要调用的Action对象是否实现了ModelDriven接口,若是实现了这个接口,则调用getModel()方法,并把返回值(本例是返回user对象)压入ValueStack。
将页面和action的的属性值保持一致,在action上写上该属性的set和get方法,这样在页面提交参数的时候,action就会调用set方法将参数值传递给其属性,这种方式主要适用于传递参数比较少的状况!
经过DomainModel传值;DomainModel即域模型,是利用model层的域对象接收参数的一种方式。
经过ModelDriven传值;action必须实现ModelDriven接口,且须要重写getModel()方法;
ActionContext.getContext().getSession() 获得个SessionMap 放入值
ActionSupport:
Actionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法,重写该方法,它会在execute()方法以前执行,如校验失败,会转入input处,必须在配置该Action时配置input属性。
Actionsupport还提供了一个getText(String key)方法还实现国际化,该方法从资源文件上获取国际化信息.
这样在自定义标签时能够定义一个变量为new actionsupport对象实现国际化。
struts2不要求咱们本身设计的action类继承任何的struts基类或struts接口,可是咱们为了方便实现咱们本身的action,大多数状况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。由于此类中实现了不少的实用借口,提供了不少默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样能够大大的简化Acion的开发。
Struts2中一般直接使用Action来封装HTTP请求参数,所以,Action类里还应该包含与请求参数对应的属性,而且为属性提供对应的getter和setter方法。
: HibernateDaoSupport,HibernateTemplate,jdbcTemplate
spring若是想整合hibernate的话,首先就应该得到SessionFactory这个类,而后再经过得到session就能够进行访问数据库了,即spring提供的类HibernateDaoSupport,HibernateTemplate应该是有setSessionFactory,在使用的时候注入一下就能够了