【济南中心】JavaEE框架:spring(一)
一、技术说明(技术介绍,技术优势以及发展史等)
1.1、什么是spring
l Spring是分层的JavaSE/EE full-stack 轻量级开源框架
分层:三层体系结构,为每一个层都提供解决方案
web层:struts2、spring-mvc
service层:spring
dao层:hibernate、mybatis、jdbcTemplate(spring)
轻量级:使用时占用资源少,依赖程序少。比较:EJB
1.2、spring由来
Expert One-to-One
J2EE Design and Development ,介绍EJB,使用,特点
Expert One-to-One
J2EE Development without EJB ,不使用EJB,spring思想
l 方便解耦,简化开发 (易扩展,易维护)
• Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
l AOP编程的支持
• Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
l 声明式事务的支持
• 只需要通过配置就可以完成对事务的管理,而无需手动编程
l 方便程序的测试
• Spring对Junit4支持,可以通过注解方便的测试Spring程序
l 方便集成各种优秀框架
• Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
l 降低JavaEE API的使用难度
• Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
[if !supportMisalignedRows][endif]
[if !supportMisalignedRows][endif]
[if !supportMisalignedRows][endif]
[if !supportMisalignedRows][endif]
[if !supportMisalignedRows][endif]
[if !supportMisalignedRows][endif]
1.3、spring核心
l 以IoC(Inverse of Control 反转控制)和AOP(Aspect Oriented Programming 面向切面编程为内核)
1.4、spring优点
1.5、spring体系结构
spring 核心功能:beans、core、context、expression
二、环境搭建(技术开发环境)2.1、获取Spring
framework jar 包 1、spring官网下载
从官网下载spring
最新的相关jar包,官网download地址 http://www.springsource.org/springcommunity-download
下载完成后会发现三个目录,命名很明确。
Docs
目录相关文档。包括一份
API 和一份各种
spring 的使用说明(reference),reference 提供了 HTML.PDF 版本,非常详细。
2.spring包的核心包
搭建第一个用到 spring 依赖注册的程序
直接用 eclipse 建立一个 JAVA
项目
然后添加 spring 的 jar
包引入
spring-core-3.2.0.M1.jar 核心依赖
jar 包
spring-context-3.2.0.M1.jar Spring
容器包
spring-beans-3.2.0.M1.jar Spring
beans 的管理包
spring-asm-3.2.0.M1.jar Spring
注:和 hibernate 一起用时这个 JAR
会冲突,解决方法删掉它就是了
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)
Caused by:
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)
spring-expression-3.2.0.M1.jar
除此之外,还有需要一个 Apache common 的 JAR
包
注:如果忘记添加会 commons-logging-1.1.1.jar 报错
Exception in thread "main"
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
commons-logging-1.1.1.jar
日志记录
3. 配置 XML
Spring
的最大的作用就是提供
bean 的管理功能,在
spring 中 bean 的管理是通过 XML 实现的,要 用此功能,需要把 bean 配置到 spring 的 xml
1. 新建立一个
xml.名字任意,如
applicationContext.xml,或者 text.xml 都可以 2. 添加 xml 头定义
xmlns=http://www.springframework.org/schema/beans ①
xsi:schemaLocation="http://www.springframework.org/schema/beans
② http://www.springframework.org/schema/beans/spring-beans-3.2.xsd ③
">
① Xmlns(XML NameSpace) 声明命名空间,建议是用网址做命名空间,但并不会去访问改网址, 仅仅是 namespace 和 xsd(xsd 是 spring 这个 xml 的 schema 文件,里面定义配置内容)里
声明的 targetNamespace 保持一致
. 注:这里命名空间是改不了的,其实是在代码中也写死了,可以打开
spring-beans3.2.0.M1-sources.jar
包的 org\springframework\beans\factory\xml\BeanDefinitionParserDelegate.java
查看对 http://www.springframework.org/schema/beans这个namespace的定义。
② schemaLoacation
.用于绑定命名空间的 schema 文件,通常是用
URL 值对,中间用空格隔
开,前面 URL 是命名空间,后面 URL 为 schema 的文件地址
③ xsd
的存放地址,如果没有声明,eclipse 会去网上下载.
在创建 xml 时,在 eclipse
编辑 xml 配置没有提示。
可以对 eclipse 中进行 schema
文件的添加
具体是
WindowsàPreferences ,搜索 XML catalog,添加 schema 文件。
Spring
的 schema 文件在下载包里有,找到
spring-3.2.0.M1\schema\beans\spring-beans-3.2.xsd
然后添加,编写 spring 配置文件就能有提示了
4. 依赖注入
4.1 、spring注入的简单案例(入门级)
新建一个 class 用于注入,
package org.beans;
public class Test { public void say(){
System.out.println("济南黑马"); } }
把类通过 xml 配置注入
xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
class="org.beans.Test" />
测试:
package org.beans;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public class testBeans {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("test.xml");
Test test=(Test) ctx.getBean("济南黑马");
test.say(); }
}
4.2、spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入。接口注入不作要求,下面介绍前两种方式。1、set注入
采用属性的set方法进行初始化,就成为set注入。
1)给普通字符类型赋值。
file:///C:\Users\aa\AppData\Local\Temp\ksohtml\wps8E7F.tmp.png
1.
public class User{
2. privateString username;
3.
4. publicString getUsername() {
5. returnusername;
6. }
7. publicvoid setUsername(String username) {
8. this.username= username;
9. }
10.
}
我们只需要提供属性的set方法,然后去属性文件中去配置好让框架能够找到applicationContext.xml文件的beans标签。标签beans中添加bean标签, 指定id,class值,id值不做要求,class值为对象所在的完整路径。bean标签再添加property
标签,要求,name值与User类中对应的属性名称一致。value值就是我们要给User类中的username属性赋的值。
1.
>
2.
name="username" value="admin">
3.
2)给对象赋值
同样提供对象的set方法
1.
public class User{
2. private UserService
userservice;
3. public UserServicegetUserservice()
{
4. returnuser;
5. }
6. public void
setUserservice(UserService userservice){
7. this.userservice= userservice;
8. }
9.
}
配置文件中要增加UserService的bean标签声明及User对象对UserService引用。
class="com.lsz.spring.service.UserService">
id="userAction"class="com.lsz.spring.action.User"
>
ref="userService">
这样配置,框架就会将UserService对象注入到User类中。
3)给list集合赋值
同样提供set方法
1.
public class User{
2. privateList
username;
3. publicList
getUsername() {
4. returnusername;
5. }
6. publicvoid
setUsername(List username) {
7. this.username= username;
8. }
9.
}
1.
id="userAction"class="com.lsz.spring.action.User"
>
2.
3.
4. zhang,san
5. lisi
6. wangwu
7.
8.
9.
4)给属性文件中的字段赋值
1.
public class User{
2. privateProperties
props ;
3. publicProperties
getProps() {
4. returnprops;
5. }
6. publicvoid
setProps(Properties props) {
7. this.props= props;
8. }
9.
}
file:///C:\Users\aa\AppData\Local\Temp\ksohtml\wps8E8F.tmp.png
1.
2.
3.
4. jdbc:oracle:thin:@localhost:orl
5. oracle.jdbc.driver.OracleDriver
6. scott
7. tiger
8.
9.
10.
标签中的key值是.properties属性文件中的名称
注意:
无论给什么赋值,配置文件中标签的name属性值一定是和对象中名称一致。
2、构造方法注入 1)构造方法一个参数file:///C:\Users\aa\AppData\Local\Temp\ksohtml\wps8E90.tmp.png
1.
public class User{
2. privateString
usercode;
3. publicUser(String
usercode) {
4. this.usercode=usercode;
5. }
6.
}
1.
id="userAction"class="com.lsz.spring.action.User">
2.
3.
2)构造函数有两个参数时
当参数为非字符串类型时,在配置文件中需要制定类型,如果不指定类型一律按照字符串类型赋值。
当参数类型不一致时,框架是按照字符串的类型进行查找的,因此需要在配置文件中制定是参数的位置 type="int"index="1">
这样制定,就是构造函数中,第一个参数为string类型,第二个参数为int类型
网友评论