1. Spring介绍

Spring是轻量级的J2EE应用程序框架。Spring的核心是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容器,Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代,Spring希望提供一站式的框架整合方案 。

Spring不会特別去提出一些子框架来与现有的OpenSource框架竞争,除非它觉得所提出的框架够新够好,例如Spring有自己的 MVC框架方案,因为它觉得现有的MVC方案有很多可以改进的地方,但它不强迫您使用它提供的方案,您可以选用您所希望的框架来取代其子框架,例如您仍可以在Spring中整合您的Struts框架 。

Spring共有7个模块,分别为:核心容器、Spring 上下文、Spring AOP、Spring DAO、Spring ORM、Spring Web 模块、Spring MVC 框架,Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。因此从你的学习中,你可得到最大的价值。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。  它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。

spring 的优点:
1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 
2.可以使用容易提供的众多服务,如事务管理,消息服务等 
3.容器提供单例模式支持 
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 
5.容器提供了众多的辅助类,能加快应用的开发 
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 
7.spring属于低侵入式设计,代码的污染极低 
8.独立于各种应用服务器 
9.spring的DI机制降低了业务对象替换的复杂性 
10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

2.ioc

概念:IoC (Inverse of Control,控制反转),是指类A中有一个类B的对象,本来需要开发者在类A中初始化这个对象的,现在经过配置,spring可以自动地完成类A中的类B对象的初始化。这个过程也可以被叫作DI (Depend Injection,依赖注入),因为B类对象依赖于A类,通过spring 类B变量被注入到了A类的对象中。
作用(好处):配置灵活。 IOC模式,系统中通过引入实现了IOC模式的IOC容器,即可由IOC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实 际的应用程序代码分开。其中一个特点就是通过文本的配件文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。 因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了。虽然说修改XML后不需要重新编译java代码,但XML经常与java源代码一起打包。所有想要修改XML的话,还是需要重新打包,还是免不了重新发布。就算修改java代码,重新编译这些修改后的代码,也不是太麻烦。那使用IOC模式最本质的好处是什么呢?有一种说法是,写大型程序的时候,会用到很多其他人开发的java类。当程序员甲用到程序员乙开发的java类A时,如果使用IOC,在程序员乙写好XML配置文件后,程序员甲就不需要关心类A应如果初始化的问题,直接使用即可。IOC有利于在多人开发大型程序中提高开发效率。
实现原理:java的反射机制。

3. AOP介绍

概念:AOP (Aspect Oriented Programming,面向切面编程),是指通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,是对面向对象思维方式的有力补充。我的理解中,可以做个形象的类比:甲要去办一件事情1,需要经过ABCD...流程。但这时,在B步聚前,被叫去先办了另一件事情2,完成之后又回来继续完成事情1的剩余步骤。被打断先去完成另一件事情,这个可以类比为AOP。AOP通过被管理记录日志、记录函数执行时间、事务管理等与进行数据处理主干无关的功能上。
作用(好处):AOP应用到项目中的好处,能够将与业务逻辑不相关的代码(如:日志、权限等)分离出来,减小相关业务类负担,并能让一些通用需求(如:事务)得到更广泛的复用。可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码。
实现原理:通过Java的动态代理来创建AOP代理。Spring 中 AOP 代理由 Spring 的 IoC 容器负责生成、管理,其依赖关系也由 IoC 容器负责管理。因此,AOP 代理可以直接使用容器中的其他 Bean 实例作为目标。

4. 环境配置

spring的官网上不容易找到spring的zip包,从这里可以下载到:http://repo.spring.io/release/org/springframework/spring/ 。另外,spring需要一些依赖包,但这些依赖包没有打包在spring的zip中,需要自己下载。包括使用IoC功能时所需要的commons-logging.jar,使用AOP功能时所需要的aopalliance.jar,aspectj-1.7.4.jar,aspectjrt.jar,aspectjweaver.jar。这些自己在网上找一下,加到用户库里就可以了。

新建一个web工程。file->new->web project,给工程取名为Spring_Test。将下载到的spring包中的.jar文件复制到Spring_Test/WebRoot/WEB-INF/lib下。功能每个jar包都有一个doc.jar和src.jar,这两种包可以等需要的看doc和源代码的时候再加入。

5.实例:
 1 需要的jar包和文件结构

  jar包下载地址:http://pan.baidu.com/s/1sjDbzrR

  

  2 bean.xml配置文件,放在src目录下

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xmlns="http://www.springframework.org/schema/beans"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans
 5     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 6     <bean id="person" class="com.test.bean.Person">
 7         <property name="name" value="xingoo"/>
 8         <property name="age" value="12"/>
 9     </bean>
10 </beans>

  3 Person类,这里使用的是set设置注入方式

package com.test.bean;public class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void info(){System.out.println("一起来吃麻辣烫!");System.out.println("name:"+getName()+" age:"+getAge());}
}

  4 test类

package testSpring;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.test.bean.Person;public class test {public static void main(String[] args){ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");//读取bean.xml中的内容Person p = ctx.getBean("person",Person.class);//创建bean的引用对象p.info();}
}

  5 执行结果

Spring AOP/DI/IOC 简述及使用相关推荐

  1. Spring AOP与IOC

    Spring AOP实现日志服务 pom.xml需要的jar <dependency><groupId>org.apache.commons</groupId>&l ...

  2. Spring AOP与IOC以及自定义注解

    Spring AOP实现日志服务 pom.xml需要的jar <dependency><groupId>org.apache.commons</groupId>&l ...

  3. spring的DI/IOC机制

    先就IOC和DI谈一点我的看法. IOC(DI):其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述的那样晦涩.Java程序员都知道:java程序中的每个业务逻辑至少需要两个或以上的对 ...

  4. spring aop原理_Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)...

    写在前面 由于Spring家族的东西很多,一次性写完也不太现实.所以这一次先更新Spring[最核心]的知识点:AOP和IOC 无论是入门还是面试,理解AOP和IOC都是非常重要的.在面试的时候,我没 ...

  5. Spring AOP Capability and goals

    5.1.AOP概念 让我们首先定义一些中心AOP概念和术语.这些术语不是特定于Spring的.不幸的是,AOP术语不是特别直观.但是,如果Spring使用自己的术语,那将更加令人困惑. 方面:跨越多个 ...

  6. Spring AOP capabilities and goals

    Spring AOP是用纯Java实现的. 不需要特殊的编译过程. Spring AOP不需要控制类加载器层次结构,因此适合在Servlet容器或应用程序服务器中使用. Spring AOP目前仅支持 ...

  7. Spring AOP知识详解

    本文来详细说下spring中的aop内容 文章目录 Spring AOP概述 Spring AOP一代 Pointcut Jointpoint Advice Advisor 织入 Spring AOP ...

  8. 3.2 Spring AOP的设计与实现

    2019独角兽企业重金招聘Python工程师标准>>> JVM的动态代理特性 在Spring AOP实现中,使用的核心技术是动态代理,这实际上是JDK的一个特性(JDK1.3以上的版 ...

  9. Spring 5 中文解析之核心篇-Spring AOP编程

    技术交流群: 面向切面的编程(AOP)通过提供另一种思考程序结构的方式来补充面向对像的编程(OOP).OOP中模块化的关键单元是类,而在AOP中模块化是切面.切面使关注点(例如事务管理)的模块化可以跨 ...

  10. Spring AOP(一)——基础概念

    前文的一些内容更多是针对Spring容器内部的一些特性的描述,接下来一个专题将描述Spring AOP的一些信息,配置细节等等. 介绍 面向切面编程(AOP)是一种新的针对程序结构的思路,它补足了面向 ...

最新文章

  1. 计算机二级怎么更改报名密码忘记了怎么办,中考报名系统密码忘了怎么办
  2. Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
  3. 1载波把32个信道按_OFDM技术:相比FDM提高频带利用率,子载波间隔可以随意选取吗?...
  4. DLA实现跨地域、跨实例的多AnalyticDB读写访问
  5. java opencv yuv_JavaCV与OpenCV的区别和使用中遇到的问题
  6. Win10 Build 11099和11102的更动超过1200项
  7. 2017 软件开发薪酬调查:Go 和 Scala 是最赚钱的语言
  8. 计算机专业常用图论,同等学力申硕计算机专业--数学公式集合(新增学习笔记)...
  9. 微软VMM2008实战之P2V迁移攻略
  10. Java中无法到达的语句
  11. 图像处理-RGB彩色图像均衡化处理
  12. Vue页面返回顶部功能实现
  13. 阿里矢量图标库的使用方法
  14. 电气工程及其自动化计算机配置,电气工程及其自动化
  15. 交换机基础原理,冲突域和广播域
  16. Vscode文件夹和代码各种颜色(详细汇总)
  17. 相机对焦和调焦距的区别是什么 ?
  18. 常见中文乱码问题解决方式
  19. oracle ora 3136,ALERT日志中常见监听错误:ORA-3136错误的排查
  20. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第二集

热门文章

  1. javascript 的预解释机制
  2. STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT
  3. mysql端口隐藏_修改MySQL端口以及出现的问题
  4. mysql数据库中更新数据表用以下哪一项_删除数据表用以下哪一项()_学小易找答案...
  5. C语言程序设计 第八章字符串
  6. php base64_decode 图片,php读取和保存base64编码图片
  7. Ubuntu 16.04 修改为几个国内更新源
  8. 【论文笔记】Joint Cascade Face Detection and Alignment
  9. 强大高可用的数据可视化神器plotly_express实践记录
  10. 纪念一下我这尴尬中二的排名吧