1.Spring的基本应用
1.1概述
1.1.1 Spring是什么
Spring一个轻量级的框架,以IOC(控制反转)和AOP(面向切面编程)为内核,Spring在表现层提供了Spring MVC的框架整和功能,在业务逻辑层可以管理事务,记录日志,在持久层可以整合Mybatics。虽然Spring可以贯穿表现层,业务逻辑层和持久层,但绝非取代已有的框架,而是高度和开放与他们整合
1.1.2 有什么好处
- 方便解耦,简化开发:对象的创建都交给Spring,降低组件之间的耦合度。
- 非侵入式设计:spring中,业务类不需要继承框架的类,将来抛弃spring也比较方便,也就是代码对框架依赖最小化。
- 支持AOP,允许一些通用的任务,比如安全,事务,日志进行集中处理,提高了程序的复用性。
- 声明式事务管理
- 方便测试
- 方便集成框架
1.1.3 体系结构.
Spring框架采用分层架构,主要分为核心容器,数据集成/访问,web,和其他模块。

1.1.4 目录结构
通过下载并解压框架包,其中包括doc目录下的api开发文档和开发规范,libs目录下的开发需要的jar包和源码,以及schema文件夹中的约束文件。在libs目录中,有四个基础包分别是,core:包含核心工具类,beans:包含配置文件,管理和创建bean操作的类,context:提供ioc 功能上的扩展服务,expression:表达式语言
1.2核心容器
1.2.1 BeanFactory:管理bean 的工厂,负责初始化bean,调用生命周期方法。
BeanFactory beanfactory = new XmlBeanFactory(new FileSystemResource("F:/applicationContext.xml");
1.2.2 ApplicationContext
是BeanFactory的子接口,添加了国际化,事件传播的支持
实例化方法有两个
//方法一
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String config)
//这种方法Spring默认到类路径查找
//方法二
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String config)
//默认用绝对路径
在使用Spring框架时,通常在Java项目中使用ClassPathXmlApplicationContext来实例化,而在web 项目中,实例化工作交给web服务器完成,基于ContextLoaderListener实现。
BeanFactory和ApplicationContext的区别在于,如果bean中有一个属性没有注入,若使用第一种方式,在使用getbean会抛出异常,第二种方法,在初始化时会自检。
1.3入门程序
创建项目,并引入jar包。

编写测试程序,创建com.itheima.ioc包,创建一个接口,并编写实现类。
//接口
package com.itheima.ioc;
public interface UserDao {
public void say();
}
//实现类
package com.itheima.ioc;
public class UserDaoImpl implements UserDao{
public void say(){
System.out.println("i am saying vacation");
}
}
创建配置文件,在配置文件中创建bean实例。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.itheima.ioc.UserDaoImpl">
</bean>
</beans>
创建测试类
package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoc {
public static void main(String[] args) {
ApplicationContext applicationconrtext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao)applicationconrtext.getBean("userDao");
userDao.say();
// TODO Auto-generated method stub
}
}
运行

1.4依赖注入
依赖注入(DI)和控制反转(Ioc)
传统上当我们在一个类需要调用另一个类对象时,往往通过new 一个新对象的方式,这种方式增加了调用者和被调用者之间的耦合度。
现在使用了Spring框架之后,对象的实例化交由容器来完成,控制权便由调用者的程序代码转移至容器
从容器角度来看,容器负责将被依赖对象赋值给调用者的成员变量,为调用者注入了依赖实例。
通过setter方法,实现依赖注入
再定义一个接口和一个实现类,在实现类中声明上一次定义的类,调用其中的say方法。
package com.itheima.ioc;
public interface UserService {
public void say();
}
package com.itheima.ioc;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void say(){
this.userDao.say();
System.out.println("i am saying second");
}
}
关键在于配置文件的编写
<bean id="userDao" class="com.itheima.ioc.UserDaoImpl"></bean>
<bean id="userService" class="com.itheima.ioc.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
编写测试
public static void main(String[] args) {
ApplicationContext applicationconrtext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService)applicationconrtext.getBean("userService");
userService.say();
// TODO Auto-generated method stub
}
运行

1.Spring的基本应用的更多相关文章
- 基于spring注解AOP的异常处理
一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- [Spring]IoC容器之进击的注解
先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...
- 学习AOP之透过Spring的Ioc理解Advisor
花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- 学习AOP之认识一下Spring AOP
心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- Spring之旅(2)
Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...
- Spring之旅
Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...
随机推荐
- 8. 老板 不加薪,我用了 这篇 加了 3K
在K8S中,容器本身是非持久化的,当容器崩溃后,kubelet将以镜像的初始状态重新启动容器,但是此时之前容器的数据已经丢失,我们该如何保护好容器的数据呢? 在同一Pod中的容器往往需要共享一些数据, ...
- Web自动化测试:xpath & CSS Selector定位
Xpath 和 CSS Selector简介 CSS Selector CSS Selector和Xpath都可以用来表示XML文档中的位置.CSS (Cascading Style Sheets)是 ...
- MacOS下解决宿主机和docker容器之间网络互通
docker在Mac下使用非常方便,官网提供了desktop版本的可视化软件,甚至还十分贴心地集成好了k8s套件.然而如果想同时部署和使用多个容器,每个容器不使用127.0.0.1地址,而是各自有ip ...
- java时间的一些处理
获取当前时间 System.currentTimeMillis() //第一种 Date date = new Date(); System.out.println(date.getTime()); ...
- MySql Docker 主主配置
MySql 主主 准备2台Linux服务器,并且在两台服务器上,同时安装docker,国内的同学可以使用aliyun的镜像安装. curl -fsSL https://get.docker.com - ...
- Mysql Cluster7.5.6 windows10 部署安装
部署方法网上很多,以下是我的实践过程,供大家参考. 1. 硬件:3台虚拟机,全是windows 10 x64 2. 网络架构: 管理节点:192.168.37.128 数据节点 / SQL节点: 19 ...
- Hbase学习Hbase基础介绍
一.产生背景 自1970年以来,关系数据库用于数据存储和维护有关问题的解决方案.大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像Hadoop的解决方案.Hadoop使用分布式文件系统,用 ...
- 一键配置网卡IP(win10)脚本
前两天有个小伙伴问我,如何快速配置IP,在公司在家里在宿舍,快速配置IP,然后我特别为这个小伙伴写了一个脚本. @echo off mode con: cols=60 lines=25 title 网 ...
- tp where使用数组条件,如何设置or,and
1 //where条件数组拼接 2 $where['status'] = 1; 3 $maps['id'] = ['in', implode(',', $r_ids)]; 4 $maps['uid'] ...
- windows环境搭建
GO语言环境配置: 安装GOlang,添加到环境变量path 默认会创建环境变量GOPATH,其中存放代码和编译后的工程文件等,用户可以根据个人需要,在别的路径下创建gopath,并添加到环境变量中. ...