• 对于为什么使用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快速入门(一)的更多相关文章

  1. spring快速入门(四)

    一.在spring快速入门(三)的基础上,我们来了解BeanFactory及配置. Client package com.murong.client; import org.springframewo ...

  2. spring快速入门(三)

    一.在spring快速入门(二)的基础上,原先我们是采用构造方法完成对象的注入.这里还有其他的方法可以完成注入,通过set方法来完成. 修改UserActionImpl package com.mur ...

  3. spring快速入门(二)

    一.在spring快速入门(一)的基础上,我们来了解spring是如何解决对象的创建以及对象之间的依赖关系的问题 (比如client中依赖UserAction的具体实现,UserActionImpl中 ...

  4. Java基础-SSM之Spring快速入门篇

    Java基础-SSM之Spring快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java ...

  5. 【Java】Spring快速入门(一)

    Spring介绍 Spring可以轻松创建Java企业应用程序.它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并可根据应用程序的需要灵活地创建多 ...

  6. Spring快速入门

    什么是Spring Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架 分层 SUN提供的EE的三层结构:web层.业务层.数据访问层(持久层/集成层) Strut ...

  7. spring3.0+mybatis+spring快速入门

    一.首先奉上项目目录结构: 说明: dao,mapping,model包下的所有内容可以使用Generator工具自助生成. 具体用法,可以网上学习一下,比较简单,主要做以下工作: 1.提供相关的数据 ...

  8. Spring重温(一)--Spring快速入门

    1.spring官网(https://repo.spring.io)下载依赖jar. 2.配置spring环境时还需要commons-logging相关jar. 3.打开eclise创建一个工程,并将 ...

  9. Spring 快速入门

    1.持久层 (1) 域模型层   (2) Dao 持久层接口  (3) DaoImpl 持久层接口实现 2.业务层 Service 业务接口层 ServiceImpl  业务接口实现 3.展现层 Sp ...

随机推荐

  1. InnoDB还是MyISAM 再谈MySQL存储引擎的选择

    两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用. 我作为使用MySQL的用户角度出发,Innodb和My ...

  2. MCMC 、抽样算法与软件实现

    一.MCMC 简介 1. Monte Carlo 蒙特卡洛 蒙特卡洛方法(Monte Carlo)是一种通过特定分布下的随机数(或伪随机数)进行模拟的方法.典型的例子有蒲丰投针.定积分计算等等,其基础 ...

  3. HTC辟谣: HTC Vive2不会在CES 2017上公布

    HTC官方:第二代Vive不会在CES 2017上发布.曾有消息称HTC Vive的下一代--Vive 2将在CES 2017上展出能成为首个4K头显以及无线头显.但日前HTC官方给于否认,此消息不实 ...

  4. iPhone/iPad/Android UI尺寸规范 UI尺寸规范,UI图标尺寸,UI界面尺寸,iPhone6尺寸,iPhone6 Plus尺寸,安卓尺寸,iOS尺寸

    iPhone/iPad/Android UI尺寸规范 UI尺寸规范,UI图标尺寸,UI界面尺寸,iPhone6尺寸,iPhone6 Plus尺寸,安卓尺寸,iOS尺寸 iPhone界面尺寸 设备 分辨 ...

  5. pair的使用

    #include<iostream> #include<cmath> #include<cstdio> #include<algorithm> #inc ...

  6. 实验二 c语言文法

    <程序>-><声明>|<程序><函数> <函数>-><修饰符><标识符><形式参数>< ...

  7. mac osx 上面部署Django项目 apache+mysql+mod_wsgi

    1.安装Xcode command line tools 首先,编译mysql和Homebrew需要用到Xcode command line tools,所以首先安装command line tool ...

  8. UDP和TCP的区别

    UDP(User Datagram Protocol 用户数据报协议) TCP(Transmission Control Protocol 传输控制协议) UDP是一种非面向连接的传输协议,它的实现是 ...

  9. clang: error: linker command failed with exit code 1 (use -v to see invocati

    安装了 pod 的项目,如果仍旧打开 xcodeproject 文件, 运行时会弹出此 bug

  10. 第一天---HTML基础学习

    HTML(hyper text markup language) HTML不是一种编程语言,而是一种标记语言(markup language),标记语言是一套markup tag(标记标签),HTML ...