一、什么是spring?
SpringMVC的本质其实是对jsp+servlet的封装,将平时的创建对象和属性赋值等一系列操作进行了封装,通过配置文件就能实现。
二、spring的四大部分。
1:spring的核心:IOC和AOP是spring的核心。
IOC:面向对象的本质,解决对象的创建,属性的赋值和方法的调用。作为一个spring的核心模块,它的工作就是将类和类之间的依赖从代码中脱离出来。实现机制:在spring的内部有一个IOC容器beanFactory负责类与类之间的对象创建,拼接,管理。要想将一个类交给spring管理,可以有四种方式,即set注入、构造函数注入、反射注入、注解@AutoWire。
AOP:在某个方法执行之前,执行时,执行之后做一些事情。简化代码的重复书写。实现这一功能的方式有:aop联盟、java动态代理、cglib动态代理。
2:事务管理机制:jdbc、orm、oxm、jms
jdbc:springjdbctemplate、dbutil
orm:jpa、hibernate、mybaties
3:web层:mvc、provet、webservice
4:测试框架:junit
三、搭建spring框架。
1:准备工作,导入jar包。任何框架都肯定有自己的实现代码,所以第一步肯定是下载spring的jar包并导入。
spring包的下载地址:http://maven.springframework.org/release/org/springframework/spring/
如果链接没过期的话,点进去就能看到所有版本的spring包,根据你的需求,随便选择一个版本下载就行,但最好选择比较新一点的。
下载好之后,进行解压,将下面这些包复制到你项目的lib 目录下:
spring-core-4.1.5.RELEASE.jar// 核心jar
spring-beans-4.1.5.RELEASE.jar//BeanFactory工厂IOC
spring-context-4.1.5.RELEASE.jar
spring-context-support-4.1.5.RELEASE.jar
spring-expression-4.1.5.RELEASE.jar//表达式语言
spring-jdbc-4.1.5.RELEASE.jar// jdbc数据连接出来
spring-test-4.1.5.RELEASE.jar//测试
spring-web-4.1.5.RELEASE.jar//springmvc
spring-webmvc-4.1.5.RELEASE.jar//springmvc
依赖包
在apache下common都可以下载到,下载地址:http://commons.apache.org/
commons-dbcp-1.2.1.jar //数据连接池的包
commons-lang3-3.1.jar
commons-logging-1.1.3.jar//日志包,框架都使用日记管理
数据库的驱动包:
mysql-connector-java-5.1.6-bin.jar
还有几个包,也要一并引入,否则无法正常运行,我这里就不一一列出了,最后包列表如下,一个也不要少。
2:在src目录下配置applicationContext.xml文件,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?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:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd "> <!-- @Compoment这类型注解的类都是需要被扫描 说白就是:让Spring的ApplicationContext去加载和初始化所有加了注解的类,给实例化 @Repository:数据层的dao @Service:service就是service @Controller:web比如:action和springmvc-controller类 --> <!-- 扫描文件所在dao包 --> <context:component-scan base-package="com.tz.dao"></context:component-scan> <context:component-scan base-package="com.tz.service"></context:component-scan> </beans> |
也就是新建一个applicationContext.xml的文件,把上面的代码复制进去的意思。
同时配置一个log4j.properties的日志文件,如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
log4j.rootLogger=INFO, Console, infoLog log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p: %c#%M %x: %m%n log4j.logger.net.sf.ehcache=INFO log4j.logger.org.springframework.security=INFO log4j.logger.org.apache.myfaces.shared_impl.renderkit.html=INFO log4j.logger.org.hibernate=INFO log4j.logger.org.springframework=INFO log4j.logger.com.tz=INFO log4j.logger.org.apache.struts2.json=INFO log4j.logger.java.sql.Connection=INFO log4j.logger.java.sql.Statement=INFO log4j.logger.java.sql.PreparedStatement=INFO log4j.appender.infoLog = org.apache.log4j.DailyRollingFileAppender #指定日志消息的输出最低层次。 log4j.appender.infoLog.Threshold = INFO #配置日志信息的格式 log4j.appender.infoLog.layout = org.apache.log4j.PatternLayout #灵活地指定布局模式的格式 log4j.appender.infoLog.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p: %c#%M %x: %m%n #指定消息输出到文件 log4j.appender.infoLog.File = ../server/default/log/moonhong/info #生成文件的格式 log4j.appender.infoLog.DatePattern = '_'yyyy-MM-dd'.log' # Log4j中有三个主要的组件,它们分别是 Logger、Appender和Layout,Log4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系 log4j.logger.log.cas=ERROR,RollingFileForCAS #org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件) log4j.appender.RollingFileForCAS=org.apache.log4j.RollingFileAppender #后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。 log4j.appender.RollingFileForCAS.MaxFileSize=20MB #指定可以产生的滚动文件的最大数 log4j.appender.RollingFileForCAS.MaxBackupIndex=20 #指定消息输出到文件 log4j.appender.RollingFileForCAS.File=../server/default/log/moon/cas_log.log #布局自定义格式 log4j.appender.RollingFileForCAS.layout=org.apache.log4j.PatternLayout #格式名 含义 # %c 输出日志信息所属的类的全名 # %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28 # %f 输出日志信息所属的类的类名 # %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行 # %m 输出代码中指定的信息,如log(message)中的message # %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” # %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推 # %r 输出自应用启动到输出该日志信息所耗费的毫秒数 # %t 输出产生该日志事件的线程名 log4j.appender.RollingFileForCAS.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p (%F:%L) - %m%n log4j.logger.log.casFilter=ERROR,RollingFileForCasFilter log4j.appender.RollingFileForCasFilter=org.apache.log4j.RollingFileAppender log4j.appender.RollingFileForCasFilter.MaxFileSize=20MB log4j.appender.RollingFileForCasFilter.MaxBackupIndex=20 log4j.appender.RollingFileForCasFilter.File=../server/default/log/moon/casFilter_log.log log4j.appender.RollingFileForCasFilter.layout=org.apache.log4j.PatternLayout log4j.appender.RollingFileForCasFilter.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p (%F:%L) - %m%n log4j.logger.log.loginFilter=ERROR,RollingFileForLoginFilter log4j.appender.RollingFileForLoginFilter=org.apache.log4j.RollingFileAppender log4j.appender.RollingFileForLoginFilter.MaxFileSize=20MB log4j.appender.RollingFileForLoginFilter.MaxBackupIndex=20 log4j.appender.RollingFileForLoginFilter.File=../server/default/log/moon/loginFilter_log.log log4j.appender.RollingFileForLoginFilter.layout=org.apache.log4j.PatternLayout log4j.appender.RollingFileForLoginFilter.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p (%F:%L) - %m%n |
3:在web.xml注入applicationContext.xml,并设置监听。
1 2 3 4 5 6 7 8 9 10 |
<context-param> <!-- 请记住这里的名称不能够乱写,必须一模一样,区分大小写 java类去启动项目 contextClass --> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 放入WebapplicationContext ServletContext(application) web层调用service --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> |
到这一步,请启动你的项目,并访问首页,如果没报错,说明你的spring基本架构已经搭建好了,如果有错,请找到原因处理了再执行下面的内容。
4:引入junit测试框架,引入方法:
右键你的项目==>buildpath==>configer build path==>libraries==>addlibrary==>junit==>next==>finish==>ok
5:在applicationContext.xml中配置数据库的连接,以下内容的值请填写你自己的,跟这里不是完全一样。
1 2 3 4 5 6 7 |
<!-- 数据库的链接 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/tzspring?useUnicode=true&characterEncoding=utf8"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean> |
6:建一个测试类,写一个测试方法。
1 2 3 4 5 6 7 8 |
public class ConnectionTest { @Test//这里的@Test是因为引入了junit才写的,如果你没引入,则不写 public void handler() throws SQLException{ ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); BasicDataSource dataSource = (BasicDataSource) applicationContext.getBean("dataSource"); System.out.println(dataSource.getConnection()); } } |
运行该方法,如果能成功打印出你的connection,说明数据库连接没问题。
7:在applicationContext.xml进行如下配置,建立一个springjdbcTemplate的查询模板。
1 2 3 4 |
<!-- springjdbcTemplate的查询模板 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> |
8:接下来你就可以在项目中这样使用数据库了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:applicationContext.xml"}) public class UserDaoTest { @Autowired private JdbcTemplate jdbcTemplate; @Test public void handler() throws SQLException{ String sql = "INSERT INTO tz_user(username,password,age,address,email)VALUES(?,?,?,?,?)"; //保存,修改,删除,都是update int count = jdbcTemplate.update(sql,"dbjjb","ewhihf",34,"不IE无故发给百合花","1328560691@qq.com"); System.out.println(count); } } |
发表评论