基础知识:
依赖注入:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时, 因此,称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。 (1)原始社会里,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)。对应的情形为:Java程序 对应Spring的依赖注入。 第一种情况下,Java实例的调用者创建被调用的Java实例,必然要求被调用的Java类出现在调用者的代码里。无法实现二者之间的松耦合。第二种情况下,调用者无须关心被调用者具体实现过程,只需要找到符合某种标准(接口)的实例,即可使用。此时调用的代码面向接口编程,可以让调用者和被调用者解耦,这也是工厂模式大量使用的原因。但调用者需要自己定位工厂,调用者与特定工厂耦合在一起。第三种情况下,调用者无须自己定位工厂,程序运行到需要被调用者时,系统自动提供被调用者实例。事实上,调用者和被调用者都处于Spring的管理下,二者之间的依赖关系由Spring提供。 如果把类比作图纸,实例比作个体的话。 创建张三的实例的时候需要用到李四,这时候传统的做法是自己去实例话一个李四。 用了spring以后,你只要告诉spring,我需要一个李四,spring查找bean去看看李四的图纸,然后实例化一个李四交给张三。 从主动去new 对象,到变成被动注入。spring实现了控制反转。 实例化Spring容器
这样就可以通过getBean方法从ApplicationContext容器中获取装配好的Bean实例 在Java项目中通过ClassPathXmlApplicationContext类手动实例化ApplicationContext容器通常是不二之选。但对于Web项目就不行了,Web项目的启动是由相应的Web服务器负责的,因此,在Web项目中ApplicationContext容器的实例化工作最好交给Web服务器来完成。 |
Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的“图纸”
ApplicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
这个部分根据需要改变。缺什么引入什么
Domain类 是数据库表对应的持久化类
Dao类 提供了操作Hql的方法,从而提供接口
Service 提供了hQL的具体形式和调用Dao的哪些方法,从而提供服务接口
Contorller 根据得到的请求调用相应的服务处理,制作出JSON返回
各层对象的调用完全面向接口
注解@Repository用于Dao层
所谓装配,就是配置bean,收集起来图纸并对应写好,哪个是哪个的图纸。
XML配置逻辑
1.扫描包下所有带有注解的组件,纳入bean
<context:component-scan base-package="cn.itcast.oa">
@Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 @Service 用于标注业务层组件 @Controller 用于标注控制层组件(如springMvc的controller,struts中的action) @Repository用于标注数据访问组件,即DAO组件 在类的成员变量上,使用以下注解,实现属性的自动装配 @Resource: |
1.如果同时指定了name和type,那么从Spring上下文中找到唯一匹配的bean进行装配
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3.如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4.如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
2.配置数据源 用于连接到相应的数据库
XML逻辑 1..首先加载外部文件 <context:property-placeholder location="classpath:jdbc.properties"/> 2.将数据源纳入bean 此部分直接拷贝: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="${jdbc.driverClassName}"p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}" /> 3.把相关的东西补齐: 外部新建一个文件jdbc.property,里面根据实际填上相应的数据库信息 jdbc.driverClassName = XXXXXX 这里填写数据库的驱动 jdbc.url=XXXX 填写数据库的地址 jdbc.username= XXXXX 填写用户名 jdbc.password=XXXX 填写密码 |
3.配置SessionFactory
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"> //属性标签帮助注入数据源
//配置Hibernate
</bean> |
EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力;
.EhCache的使用注意点
当用Hibernate的方式修改表数据(save,update,delete等等),这时EhCache会自动把缓存中关于此表的所有缓存全部删除掉(这样能达到同步)。但对于数据经常修改的表来说,可能就失去缓存的意义了(不能减轻数据库压力);
.EhCache使用的场合
.比较少更新表数据
EhCache一般要使用在比较少执行write操作的表(包括update,insert,delete等)[Hibernate的二级缓存也都是这样];
.对并发要求不是很严格的情况
两台机子中的缓存是不能实时同步的;
4.hibernate template是spring提供给使用者的一个便捷类,可以方便操作数据库
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"
p:sessionFactory-ref="sessionFactory" />
5.配置数据库事务 这一段照抄就行了
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" />
6.aop
aop常用于日志或者事务
因为我们只用到事务,这里介绍事务。
aop配置
<aop:config>
切入点 <aop:pointcut id="serviceMethod" expression="execution(* com.aut.service.*Service.*(..))" /> 第一个*是指任意返回值类型 第二个*表示任意服务 第三个*表示*service下的任意class 最后二个.. 表示通配 方法可以有0个或多个参数 |
spring增强 <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" /> advice是切面 |
</aop:config>
切面 <tx:advice id="txAdvice" transaction-manager="transactionManager"> |
7.Ehcache缓存
<bean id="cacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:configLocation="classpath:ehcache.xml"/>
SpringMVC 的配置分为两部分 application.xml 和 spring-servlet.xml
application.xml :对应的是系统级别的配置,作用范围是系统上下文。
spring-servlet.xml:对应的是 controller 级别的配置,作用范围是控制层上下文。
spring-servlet.xml
1.启动注解驱动
<mvc:annotation-driven/>
<context:component-scan base-package="com.XX.XX" />
3.配置视图
配置视图解析器
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="suffix" value=".jsp"></property>
</bean>
MessageSource用于国际化
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource"
p:basename=" " />
web.xml
该xml是用来初始化配置信息的
比如:Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。
加载顺序与它们在 web.xml 文件中的先后顺序无关。
ServletContext -> context-param -> listener -> filter -> servlet
<context-param> </context-param> Servlet的监听器Listener <listener> </listener> servlet配置 |
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
为servlet定制URL
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
过滤器能够对目标资源的请求和相应进行截取。
<filter><filter-name>forumFilter</filter-name>
<filter-class>com.XX.XX.ForumFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>forumFilter</filter-name>
<url-pattern>*.html</url-pattern>
<filter-mapping>
<filter-name>forumFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
还有hibernateFilter 、encodingFilter等
欢迎页
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>