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. Python 中的运算符重载

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一种运算符对于不同类型的对象,有不同的使用方式.例如, + 用于整型对象,表示两个数相加:用于字符串 ...

  2. 【Windows系统常用命令集合】

    查看建立的TCP连接:netstat -n 查看建立的TCP连接的进程:netstat -nb 查看本机侦听的端口: netstat -an (说明:如果端口没有侦听 检查服务) 测试到远程计算机的某 ...

  3. 【磁盘/文件系统】第三篇:标准磁盘分区流程针对parted(一般硬盘容量大于2T(但是小于2T也可以进行分区);分区数最大是支持100多个分区)

    说明: 在 Linux 上可以采用 parted 来对磁盘进行分区 1.通过 fdisk -l 可以查看磁盘是否存在, 由于使用的是大磁盘(大于2T),fdisk 不能用来作为分区工具了,而应该使用 ...

  4. python序列(四)成员资格判断

    判断是否存在指定的值 1.count()方法,如果存在则返回大于0的数,如果返回0则表示不存在. 2."in"关键字来判断一个值是否存在于列表中,返回结果为"True&q ...

  5. Astra示例程序库正式上线啦

    新上线的Astra示例程序库提供了基于多种编程语言和框架使用Astra的例子.借助这个示例程序库,你可以在短时间内建构起数据库.创建多个表.装载示例数据并部署基于Cassandra的应用程序. 什么是 ...

  6. easyui中加载table列表数据 第一次有数据第二次没有数据问题

    $('#allUsingProductTable').datagrid({  加载数据时,第二加载时table会发生变化会出现找不到问题.如果是弹框没有影响,弹框出现出现列表每次都会执行销毁方法. 解 ...

  7. CODING 静态网站服务升级,快速、稳定、高拓展!

    CODING 静态网站拥有强大的页面托管服务,目前已有数万开发者.设计师.产品经理.团队与企业使用 CODING 静态网站托管了他(她)们的个人网站.博客.企业与产品官网.在线文档等.CODING 静 ...

  8. Vue项目如何打包问题总结

    当我们将 vue 项目完成后,面临的就是如何将项目进行打包上线,放到服务器中.我使用的是 vue-cli(simple) 脚手架,所以就讲一下如何将项目进行打包,并放到 tomcat 上. 先来描述一 ...

  9. 关于opcache中opcache.revalidate_freq参数设置测试报告

    1.测试目的: 测试出opcache中,opcache.revalidate_freq这个参数最适合的大小 说明:如果opcache.revalidate_freq参数越大,服务器单位时间能接收的请求 ...

  10. hive优化之小文件合并

    文件数目过多,会给HDFS带来压力,并且会影响处理效率,可以通过合并Map和Reduce的结果文件来消除这样的影响: set hive.merge.mapfiles = true ##在 map on ...