Spring技术Word文档下载推荐.docx
- 文档编号:22069915
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:17
- 大小:145.96KB
Spring技术Word文档下载推荐.docx
《Spring技术Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Spring技术Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
bean标签再添加property标签,要求,name值与User类中对应的属性名称一致。
value值就是我们要给User类中的username属性赋的值。
1.<
bean
id="
userAction"
class="
com.lsz.spring.action.User"
>
2.<
span
style="
white-space:
pre"
<
/span>
property
name="
username"
value="
admin"
/property>
3.<
/bean>
2)给对象赋值
同样提供对象的set方法
private
UserService
userservice;
public
UserServicegetUserservice()
returnuser;
void
setUserservice(UserService
userservice){
this.userservice=
9.}
配置文件中要增加UserService的bean标签声明及User对象对UserService引用。
!
--对象的声明-->
userService"
com.lsz.spring.service.UserService"
4.<
userservice"
ref="
6.<
这样配置,框架就会将UserService对象注入到User类中。
3)给list集合赋值
同样提供set方法
privateList<
String>
publicList<
setUsername(List<
propertynamepropertyname="
list>
value>
zhang,san<
/value>
lisi<
wangwu<
/list>
9.<
4)给属性文件中的字段赋值
privateProperties
props
;
publicProperties
getProps()
returnprops;
setProps(Properties
props)
this.props=
props;
bean>
props"
props>
propkeypropkey="
url"
jdbc:
oracle:
thin:
@localhost:
orl<
/prop>
driverName"
oracle.jdbc.driver.OracleDriver<
scott<
password"
tiger<
/props>
10.<
prop>
标签中的key值是.properties属性文件中的名称
注意:
无论给什么赋值,配置文件中<
property>
标签的name属性值一定是和对象中名称一致。
2构造方法注入
1)构造方法一个参数
usercode;
publicUser(String
usercode)
this.usercode=usercode;
6.}
constructor-argvalueconstructor-argvalue="
/constructor-arg>
2)构造函数有两个参数时
当参数为非字符串类型时,在配置文件中需要制定类型,如果不指定类型一律按照字符串类型赋值。
当参数类型不一致时,框架是按照字符串的类型进行查找的,因此需要在配置文件中制定是参数的位置
index="
0"
23"
type="
int"
1"
这样制定,就是构造函数中,第一个参数为string类型,第二个参数为int类型
2)AOP面向切面编程
aop就是纵向的编程,业务1和业务2都需要一个共同的操作,与其往每个业务中都添加同样的代码,不如写一遍代码,让两个业务共同使用这段代码。
spring中面向切面变成的实现有两种方式,一种是动态代理,一种是CGLIB,动态代理必须要提供接口,而CGLIB实现是有继承。
3,为什么使用spring框架
在不使用spring框架之前,我们的service层中要使用dao层的对象,不得不在service层中new一个对象。
如下:
1.//dao层对象
2.public
UserDao{
insert(User
user){}
4.}
6.//service层对象
7.public
classUserService{
user){
UserDaouserdao
=
new
UserDao();
10.
userdao.insert(user);
11.
12.}
存在的问题:
层与层之间的依赖。
使用框架后:
privateUserDao
userdao;
publicUserDao
getUserdao()
returnuserdao;
12.
13.
setUserdao(UserDao
userdao)
14.
this.userdao=
15.
16.
17.
18.
19.
20.
21.}
service层要用dao层对象需要配置到xml配置文件中,至于对象是怎么创建的,关系是怎么组合的都交给了spring框架去实现。
4,框架优点:
(1)轻量级的容器框架没有侵入性
(2)使用IoC容器更加容易组合对象直接间关系,面向接口编程,降低耦合
(3)Aop可以更加容易的进行功能扩展,遵循ocp开发原则
(4)创建对象默认是单例的,不需要再使用单例模式进行处理
5,缺点:
业务功能依赖spring特有的功能,依赖与spring环境。
junit单元测试:
1,拷贝jar包
junit-3.8.2.jar(4.x主要增加注解应用)
2,写业务类
//添加方法
login()
throws
Exception{
if("
.equals(username){
return"
success"
}else{
error"
19.}
3,定义测试类
测试类最好单独建立项目,或者单独定义文件夹存储,需要继承junit.framework.TestCase
4,增加测试方法
测试方法必须是public,不应该有返回值,方法名必须以test开头,无参数
测试方法是有执行先后顺序,按照方法的定义先后顺序
多个测试方法对同一个业务方法进行测试,一般每个逻辑分支结构都有测试到。
TestUserextends
TestCase{
testUser_Success()
//准备数据
Useraction
User();
action.setUsername("
);
//调用被测试方法
Stringresult
action.login();
//判断测试是否通过
assertEquals("
result);
13.}
运行程序,如果测试成功会出现如下图所示的结果
如果运行失败,有方法没有通过测试,那么就会显示出在哪个方法出错了。
上图中绿色的条会变成红色的。
5,测试类的生命周期方法
1.
2.//用来进行初始化操作
3.@Override
4.protectedvoid
setUp()
Exception
System.out.println("
setUp..."
8.//用来做销毁操作
9.@Override
10.protectedvoid
tearDown()
tearDown..."
setUp方法会在每一个测试方法前执行一次。
tearDown方法会在每一个测试方法后执行一次
自动装配:
set注入和构造注入有时在做配置时比较麻烦。
所以框架为了提高开发效率,提供自动装配功能,简化配置。
Spring框架式默认不支持自动装配的,要想使用自动装配需要修改spring配置文件中<
标签的autowire属性
自动装配属性有6个值可选,分别代表不同的含义。
1,byName
从Spring环境中获取目标对象时,目标对象中的属性会根据名称在整个Spring环境中查找<
标签的id属性值。
如果有相同的,那么获取这个对象,实现关联。
整个Spring环境:
表示所有的spring配置文件中查找,那么id不能有重复的。
2,byType
从Spring环境中获取目标对象时,目标对象中的属性会根据类型在整个spring环境中查找<
标签的class属性值。
缺点:
如果存在多个相同类型的bean对象,会出错。
如果属性为单一类型的数据,那么查找到多个关联对象会发生错误。
如果属性为数组或集合(泛型)类型,那么查找到多个关联对象不会发生异常。
3,constructor
使用构造方法完成对象注入,其实也是根据构造方法的参数类型进行对象查找,相当于采用byType的方式。
4,autodetect
自动选择:
如果对象没有无参数的构造方法,那么自动选择constructor的自动装配方式进行构造注入。
如果对象含有无参数的构造方法,那么自动选择byType的自动装配方式进行setter入。
5,no
不支持自动装配功能
6,default
表示默认采用上一级标签的自动装配的取值。
如果存在多个配置文件的话,那么每一个配置文件的自动装配方式都是独立的。
如果配置文件存在多个的情况下,载置文件的方式:
1)可以指定总的配置文件去包含子的配置文件,然后只加载总的配置文件即可在总的配置文件applicationContext.xml中使用import标签进行子文件包<
importresource="
applicationContext-test.xml"
/>
代码中加载配置文件:
font-size:
18px;
"
ApplicationContextac=
newClassPathXmlApplicationContext("
applicationContext.xml"
2)使用星号来匹配多个文件进行加载,文件名称要符合规律。
(推荐使用)
//配置文件的名称
2.applicationContext.xml
3.applicationContext-action.xml
4.applicationContext-service.xml
5.applicationContext-dao.xml
7.ApplicationContextac
=newClassPathXmlApplicationContext("
applicationContext*.xml"
3)可以使用数组作为参数,一次性加载多个配置文件
2.String[]files={"
"
};
3.ApplicationContextac
newClassPathXmlApplicationContext(files);
自动装配功能和手动装配要是同时使用,那么自动装配就不起作用。
注解:
注解Annotation,是一种类似注释的机制,在代码中添加注解可以在之后某时间使用这些信息。
跟注释不同的是,注释是给我们看的,java虚拟机不会编译,注解也是不编译的,但是我们可以通过反射机制去读取注解中的信息。
注解使用关键字@interface,继承java.lang.annotition.Annotition
spring框架为我们提供了注解功能。
使用注解编程,主要是为了替代xml文件,使开发更加快速。
但是,xml文件的使用就是解决修改程序修改源代码,现在又不去使用xml文件,那么不就违背了开闭原则了么,得确是。
不过么,注解也有注解的好,使用注解就不用配置那么多的xml文件啦,最重要的是开发效率高。
。
在没有使用注解时,spring框架的配置文件applicationContext.xml文件中需要配置很多的<
标签,用来声明类对象。
使用注解,则不必在配置文件中添加标签拉,对应的是在对应类的“注释”位置添加说明。
具体介绍如下:
spring框架使用的是分层的注解。
持久层:
@Repository;
服务层:
@Service
控制层:
@Controller
1,使用注解,需要在配置文件中增加命名空间和约束文件
beans
...
2.xmlns:
context="
http:
//www.springframework.org/schema/context"
3.xsi:
schemaLocation="
4....
5.http:
//www.springframework.org/schema/contexthttp:
//www.springframework.org/schema/context/spring-context-2.5.xsd
6."
2,告诉框架那些类是使用注解的。
context:
component-scanbase-package="
com.lsz.spring"
/>
3,持久层注解
1.Package
com.lsz.spring;
3.@Repository
4.public
5.//。
@Repository
等同于配置文件中的
userDao"
com.lsz.spring.UserDao"
4,服务层注解
1.@Service(value="
testService"
)
classTestService
4.@Resource//相当于自动装配
5.private
UserDao
userDao
getUserDao()
returnuserDao;
setUserDao(UserDao
userDao)
this.userDao=
userDao;
14.}
@Resource
对象间关系的组合,默认采用的是byName方式进行装配,如果根据名称查找不到关联的对象,那么会再采用byType继续查找。
@Service注解等同与
com.lsz.spring.UserService"
5,控制层注解
1.@Controller(valu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Spring 技术