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的基本应用的更多相关文章

  1. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  2. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  3. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  4. [Spring]IoC容器之进击的注解

    先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...

  5. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  6. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  7. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  8. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  9. Spring之旅(2)

    Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...

  10. Spring之旅

    Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...

随机推荐

  1. 《Spring Boot 实战纪实》之关键点文档

    目录 前言 (思维篇)人人都是产品经理 1.需求文档 1.1 需求管理 1.2 如何攥写需求文档 1.3 需求关键点文档 2 原型设计 2.1 缺失的逻辑 2.2 让想法跃然纸上 3 开发设计文档 3 ...

  2. ArrayList之SubList源码解析

    subList是ArrayList的内部类, public List<E> subList(int fromIndex, int toIndex) { subListRangeCheck( ...

  3. Sentinel滑动窗口算法

    在前面搞清楚了Sentinel的使用后,大致理了一下Sentinel的责任链,搞清楚了这个,基本就已经梳理清楚sentinel-core模块的大部分内容,顺着这条链路可以继续梳理很多东西. 知其然.知 ...

  4. 152. Maximum Product Subarray动态规划连乘最大子串

    Find the contiguous subarray within an array (containing at least one number)which has the largest p ...

  5. 【STL 源码剖析】浅谈 STL 迭代器与 traits 编程技法

    大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub : https://github.com/rongweihe/Mor ...

  6. 数据库分库分表容量划分建议参考阿里云DRDS原则

    做分库分表的时候 一直想知道分库分表容量的最优规则有什么好的建议,以下是参考阿里云 DRDS 分库分表的规则,还是有一定的参考意义 .

  7. b站视频下载技术分享

    最近无聊分析了一下b站的视频流协议,简单分享下爬取的流程. 首先先要找到视频对应的aid和cid,aid就相当于av号,而av号对应网页下的每一个视频都有对应的cid,普通视频就是分p,番剧就是集数, ...

  8. Kubernetes K8S之通过helm部署metrics-server与HPA详解

    Kubernetes K8S之通过helm部署metrics-server与 Horizontal Pod Autoscaling (HPA)详解 主机配置规划 服务器名称(hostname) 系统版 ...

  9. Kubernetes官方java客户端之五:proto基本操作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  10. 知识图谱和neo4j的基本操作

    一.知识图谱的简介 1.知识图谱是什么 知识图谱本质上是语义网络(Semantic Network)的知识库 可以理解为一个关系图网络. 2.什么是图 图(Graph)是由节点(Vertex)和边(E ...