Spring框架学习一
Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209
Spring框架学习(一)
1、什么是Spring框架?
Spring是J2EE应用程序框架,是轻量级的IOC和AOP的容器框架,主要针对JavaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以与Struts2,Hibernate和ibatis等框架组合使用。
2、架构概述,

1)IOC(Inversion of Control)控制反转,对象创建责任的反转,在Spring中BeanFactory是IOC容器的核心接口,负责实例化、定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFactory实现BeanFactory接口,通过获取XML配置文件数据,组成应用对象及应用对象间的依赖关系。
Spring中有三种注入方式,一种是Set注入、一种是接口注入、另一种是构造方法注入。
2)AOP面向切面编程
AOP是面向纵向的编程。例如,业务一和业务二都需要一个共同的操作,与其往每个业务中都添加同样的代码,不如写一遍代码,让两个业务共同使用这段代码。
Spring中面向切面的编程有两种实现方式,一种是CGLIB,动态代理必须要提供接口,而CGLIB实现是有继承。
3、为什么要使用Spring框架?
在不使用Spring框架之前,我们的Service层中要使用dao层的对象,不得不在Service中new一个新的对象。如下:
//dao层对象
public class UserDao{
publicvoid insert(User user){}
}
//service层对象
public classUserService{
public void insert(User user){
UserDao userdao = new UserDao();
userdao.insert(user);
}
}
存在的问题:层与层之间的依赖
使用框架后,如下
//dao层对象
public class UserDao{
publicvoid insert(User user){}
}
//service层对象
public classUserService{
private UserDao userdao;
publicUserDao getUserdao() {
returnuserdao;
}
publicvoid setUserdao(UserDao userdao) {
this.userdao= userdao;
}
publicvoid insert(User user){
userdao.insert(user);
}
}
Service层要用到dao层对象需要配置到XML配置文件中吗,至于对象是怎么创建的,关系是怎么组合的都交给了Spring框架去实现
4、框架优点
轻量级的容器框架没有侵入性
使用IOC容器更加容易组合对象间直接关系,面向接口组合,降低耦合
AOP可以更加容易的进行功能扩展,遵循OCP开发原则
创建对象默认是单例的,不需要再使用单例模式进行处理。
5、缺点:业务功能依赖Spring特有的功能,依赖于Spring环境
Spring框架学习(二) 依赖注入
Spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入。接口注入不作要求,下面介绍前两种方式。
1、缺点:set注入
采用属性的set方法进行初始化,就成为set注入。
1)给普通字符类型赋值
public class User{
private String username;
public String getUsername() {
returnusername;
}
public void setUsername(String username) {
this.username= username;
}
}
我们只需要提供属性的set方法,然后去属性文件中去配置好让框架能够找到applicationContext.xml文件的bean标签。标签beans中添加bean标签。指定id,class值,id值不做要求,class值为对象所在的完整路径。bean标签再添加property标签,要求,name值与user类中对应的属性名称一致,value值就是我们要给username属性中赋的值。
<bean id="userAction"class="com.lsz.spring.action.User" >
<span style="white-space:pre"> </span><property name="username" value="admin"></property>
</bean>
2)给对象赋值
同样提供对象的set方法
public class User{
private UserService userservice;
public UserService getUserservice() {
returnuser;
}
public void setUserservice(UserService userservice){
this.userservice= userservice;
}
}
配置文件中要增加UserService的bean标签声明及User对象对UserService引用
<!--对象的声明-->
<bean id="userService" class="com.lsz.spring.service.UserService"></bean>
<bean id="userAction"class="com.lsz.spring.action.User" >
<property name="userservice" ref="userService"></property>
</bean>
这样的配置,框架就会将UserService对象注入到User类中。
3)给list集合赋值
同样提供set方法
public class User{
private List<String> username;
public List<String> getUsername() {
returnusername;
}
public void setUsername(List<String> username) {
this.username= username;
}
}
<bean id="userAction"class="com.lsz.spring.action.User" >
<propertynamepropertyname="username">
<list>
<value>zhang,san</value>
<value>lisi</value>
<value>wangwu</value>
</list>
</property>
</bean>
4)给属性文件中的字段赋值
public class User{
private Properties props ;
public Properties getProps() {
returnprops;
}
public void setProps(Properties props) {
this.props= props;
}
}
<bean>
<propertynamepropertyname="props">
<props>
<propkeypropkey="url">jdbc:oracle:thin:@localhost:orl</prop>
<propkeypropkey="driverName">oracle.jdbc.driver.OracleDriver</prop>
<propkeypropkey="username">scott</prop>
<propkeypropkey="password">tiger</prop>
</props>
</property>
</bean>
<prop>标签中的key值是.properties属性文件中的名称
2、构造方法注入
1)构造方法一个参数
public class User{
privateString usercode;
publicUser(String usercode) {
this.usercode=usercode;
}
}
<bean id="userAction"class="com.lsz.spring.action.User">
<constructor-argvalueconstructor-argvalue="admin"></constructor-arg>
</bean>
2)构造方法两个参数
当参数为非字符串类型时,在配置文件中需要制定类型,如果不指定类型一律按照字符串类型赋值。当参数类型不一致时,框架是按照字符串的类型进行查找的,因此需要在配置文件中制定参数的位置。
<constructor-argvalueconstructor-argvalue="admin"index="0"></constructor-arg> <constructor-argvalueconstructor-argvalue="23" type="int"index="1"></constructor-arg>
这样制定,就是构造函数中,第一个参数为String类型,第二个参数为int类型。
Spring框架学习一的更多相关文章
- spring框架学习(三)junit单元测试
spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学 ...
- Spring框架学习1
AnonymouL 兴之所至,心之所安;尽其在我,顺其自然 新随笔 管理 Spring框架学习(一) 阅读目录 一. spring概述 核心容器: Spring 上下文: Spring AOP ...
- spring 框架学习网站
spring 框架学习网站 NO1 http://www.mkyong.com NO2 https://spring.io/docs/reference
- Spring框架学习之IOC(二)
Spring框架学习之IOC(二) 接着上一篇的内容,下面开始IOC基于注解装配相关的内容 在 classpath 中扫描组件 <context:component-scan> 特定组件包 ...
- Spring框架学习之IOC(一)
Spring框架学习之IOC(一) 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spri ...
- Spring框架学习笔记(5)——Spring Boot创建与使用
Spring Boot可以更为方便地搭建一个Web系统,之后服务器上部署也较为方便 创建Spring boot项目 1. 使用IDEA创建项目 2. 修改groupid和artifact 3. 一路n ...
- Spring框架学习总结(上)
目录 1.Spring的概述 2.Spring的入门(IOC) 3.Spring的工厂类 4.Spring的配置 5.Spring的属性注入 6.Spring的分模块开发的配置 @ 1.Spring的 ...
- Spring框架学习笔记(8)——spring boot+mybatis plus+mysql项目环境搭建
之前写的那篇Spring框架学习笔记(5)--Spring Boot创建与使用,发现有多小细节没有提及,,正好现在又学习了mybatis plus这款框架,打算重新整理一遍,并将细节说清楚 1.通过I ...
- Spring框架学习笔记(1)
Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...
随机推荐
- java 事件监听 - 鼠标
java 事件监听 - 鼠标 //事件监听 //鼠标事件监听 //鼠标事件监听有两个实现接口 //1.MouseListener 普通的鼠标操作 //2.MouseMotionListener 鼠标的 ...
- GridLookUpEdit多列模糊查询最简单方式 z
GridLookUpEdit的知识库是RepositoryItemGridLookUpEdit,切确的说GridLookUpEdit只是RepositoryItemGridLookUpEdit的一个壳 ...
- Java生成XML文件
我们在数据库中的数据可以将其提取出来生成XML文件,方便传输.例如数据库中有Admin这张表: 我们写一个java类表示admin数据: package xmlDom.vo; import java. ...
- dos笔记
MS DOS 命令大全 一.基础命令 1 dir 无参数:查看当前所在目录的文件和文件夹. /s:查看当前目录已经其所有子目录的文件和文件夹. /a:查看包括隐含文件的所有文件. /ah:只显示出隐含 ...
- JavaScript的学习4
一.Array对象 ArrayObject.reverse() 将数组进行翻转 ArrayObject.shift() 删除数组中的第一个元素并将其返回 ArrayObject.unshi ...
- 回溯 DFS 深度优先搜索[待更新]
首先申明,本文根据微博博友 @JC向北 微博日志 整理得到,本文在这转载已经受作者授权! 1.概念 回溯算法 就是 如果这个节点不满足条件 (比如说已经被访问过了),就回到上一个节点尝试别 ...
- C++11 lambda的理解
C++11 的 lambda 表达式规范如下: [ capture ] ( params ) mutable exception attribute -> ret { body } (1) [ ...
- Solaris 自动挂载
修改文件:vim /etc/vfstab添加命令:/dev/dsk/c2t0d0p0:1 - /media/PARTITION1 pcfs ...
- ios 设置声音和震动,单独控制
一.今天项目中涉及了设置这快的声音震动和响铃,搞的头大,以前搞过,只是简单的调用系统的方法就可以实现,但是现在的公司要求,震动是震动,响铃是响铃,我看了微信,微信也是的分开的,做的很好,但是我就纳闷了 ...
- tracert-命令小结
前言:今天在阅读“Web性能权威指南”这本书的时候,发现 tracert 这个命令挺有意思的,在分析网络性能瓶颈的时候也能使用的到,在此就小记一笔以备后用. 1:作用 tracert 是一 ...