spring快速入门(一)
对于为什么使用spring框架,这里不多做解释,详情请百度。本人推荐面向驱动程序学习,通过实战来瞧瞧spring技术的伟大。所以先来看看原始开发一个简单的例子,由例子引入spring相关的技术。如果错误,敬请指正~~
1、新建一个java项目,项目结构图如下:

项目说明:该项目简单模拟添加一个用户的一个过程,由客户端client发送请求,Acton作为控制层,Dao作为数据层处理,数据处理层有两个不同的实现!
UserDao代码:
package com.murong.dao;
public interface UserDao {
//添加用户
public void addUser(String name,int age);
}
UserDaoMysqlImpl代码:
package com.murong.dao;
public class UserDaoMysqlImpl implements UserDao {
@Override
public void addUser(String name, int age) {
System.out.println("mysql添加用户成功"+"用户名称:"+name+"年龄:"+age);
}
}
UserDaoOracleImpl代码:
package com.murong.dao;
public class UserDaoOracleImpl implements UserDao {
@Override
public void addUser(String name, int age) {
System.out.println("oracle添加用户成功"+"用户名称:"+name+"年龄:"+age);
}
}
UserAction代码:
package com.murong.action;
public interface UserAction {
//添加用户
public void addUser(String name,int age);
}
UserActionImpl代码:
package com.murong.action; import com.murong.dao.UserDao;
import com.murong.dao.UserDaoMysqlImpl;
import com.murong.dao.UserDaoOracleImpl; public class UserActionImpl implements UserAction{ @Override
public void addUser(String name, int age) {
//由mysql实现
UserDao userDaoImpl = new UserDaoMysqlImpl();
userDaoImpl.addUser(name, age); //由oracle实现
UserDao userDaoOracle = new UserDaoOracleImpl();
userDaoOracle.addUser(name, age);
} }
Client代码:
package com.murong.client; import com.murong.action.UserAction;
import com.murong.action.UserActionImpl; public class Client { public static void main(String[] args) {
UserAction userAction = new UserActionImpl();
userAction.addUser("久伴", 24);
}
}
分析项目问题:我们在UserActionImpl的实现类中依赖UserDao的具体实现类,由我们的程序主动查找服务(对象)定位,即查找具体的实现类(UserDaoMysqlImpl或者UserDaoOracleImpl)完成添加功能。但是这是存在一定的硬编码问题。当然我们可以通过工厂的方式来创建UserDao,工厂隐藏了实现类的具体创建细节。但是呢,代码也不是很可观,起码我们的UserActionImpl中还存在工厂资源。其实我们还是自己拿到工厂自己创建对象。
那么Spring是怎么样实现的呢?
Spring是通过IOC容器完成对对象的创建,我们现在就不需要自己创建对象了,然后通过注入(DI)的方式给我们送相对应的资源。这就类似于Servlet中的request和response,它们是由tomcat容器创建,送给我们,我们直接使用就可以了。
提前了解依赖注入和控制反转!!!
依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一 个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,而是通过IOC容器创建,通过注入的方式给调用者。因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。
spring快速入门(一)的更多相关文章
- spring快速入门(四)
一.在spring快速入门(三)的基础上,我们来了解BeanFactory及配置. Client package com.murong.client; import org.springframewo ...
- spring快速入门(三)
一.在spring快速入门(二)的基础上,原先我们是采用构造方法完成对象的注入.这里还有其他的方法可以完成注入,通过set方法来完成. 修改UserActionImpl package com.mur ...
- spring快速入门(二)
一.在spring快速入门(一)的基础上,我们来了解spring是如何解决对象的创建以及对象之间的依赖关系的问题 (比如client中依赖UserAction的具体实现,UserActionImpl中 ...
- Java基础-SSM之Spring快速入门篇
Java基础-SSM之Spring快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java ...
- 【Java】Spring快速入门(一)
Spring介绍 Spring可以轻松创建Java企业应用程序.它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并可根据应用程序的需要灵活地创建多 ...
- Spring快速入门
什么是Spring Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架 分层 SUN提供的EE的三层结构:web层.业务层.数据访问层(持久层/集成层) Strut ...
- spring3.0+mybatis+spring快速入门
一.首先奉上项目目录结构: 说明: dao,mapping,model包下的所有内容可以使用Generator工具自助生成. 具体用法,可以网上学习一下,比较简单,主要做以下工作: 1.提供相关的数据 ...
- Spring重温(一)--Spring快速入门
1.spring官网(https://repo.spring.io)下载依赖jar. 2.配置spring环境时还需要commons-logging相关jar. 3.打开eclise创建一个工程,并将 ...
- Spring 快速入门
1.持久层 (1) 域模型层 (2) Dao 持久层接口 (3) DaoImpl 持久层接口实现 2.业务层 Service 业务接口层 ServiceImpl 业务接口实现 3.展现层 Sp ...
随机推荐
- 主成分分析 (PCA) 与其高维度下python实现(简单人脸识别)
Introduction 主成分分析(Principal Components Analysis)是一种对特征进行降维的方法.由于观测指标间存在相关性,将导致信息的重叠与低效,我们倾向于用少量的.尽可 ...
- Linux内核笔记——内存管理之块内存分配
内核版本:linux-2.6.11 伙伴系统 伙伴系统是linux用于满足对不同大小块物理内存分配和释放请求的解决方案. 内存管理区 linux将物理内存分成三个内存管理区,分别为ZONE_DMA Z ...
- bzoj3123: [Sdoi2013]森林
题面传送门 复出的第一道题.. md就遇到坑了.. 简单来说就是可持久化线段树+启发式合并啊.. 感觉启发式合并好神奇好想学 每一次建边就暴力合并,每一个节点维护从根到它的权值线段树 按照题面的话最省 ...
- Android -- PopupWindow(其中嵌套ListView 可以被点击)
1. 效果图
- 基础1.初次接触Jquery
1.浅理解Jquery:jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents.events.实现动画效果,并且方便地为网站提供AJAX交互. 2.D ...
- 解决nginx中proxy_pass到tomcat的session丢失问题
之前在配置tomcat的时候都是一个项目对应一个tomcat,也就是一个端口.最近需要把两个项目整合到同一个tomcat中,通过配置nginx让两个域名指向同一tomcat的不同项目.整合完毕后发现其 ...
- Linux Shell 编程中的特殊符号
一.井号 # 1.在脚本文件中对一行进行注释. 2.在引号和\符号后不是注释,只是#号本身: echo "12 # hehe" echo '12 # hehe' echo 12 \ ...
- ajax和jquery
ajax的定义: AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 Ja ...
- flash小游戏在Kongregate上线——BasketBall Master(篮球大师)
小游戏地址,欢迎上去留言评论.游戏完成度没有达到期望水平,只能算完成了核心玩法吧,一些其他构想来不及实现. BasketBall Master(篮球大师) 这个小游戏很早之前就基本做好了,只因有些细节 ...
- python中的参数问题
python中的有默认参数和可变参数之分 默认参数arg 可变参数args, kargs 默认参数arg就是调用指定参数 可变参数*arg调用时传入的的参数会被python自动包装为列表 可变参数ka ...