谈谈自己对Spring中IOC和AOP的理解
Spring框架的核心思想主要是IOC和AOP的思想
- IOC
- IOC概念
- Spring中的IOC
- AOP
- AOP概念
- 百度百科的解释
- 个人理解
- AOP思想
IOC
IOC概念
所谓IOC即 Inversion Of Control----控制反转。那么是什么意思呢?举个例子,平常在我们的程序中,我们需要通过我们的程序,实例化一个对象,然后利用这个对象进行一系列后续操作,但是,在Spring的框架中,我们可以不用通过程序实例化一个对象,只需要通过配置即可创建类对象,并且由Spring在运行阶段实例化对象、组装对象即可。
Spring中的IOC
Spring中的IOC表现在业务逻辑层(service层),在spring框架中,类对象的创建是交由spring进行管理的。具体步骤如下(举例)
1.我们需要创建一个实体类(User)
我们需要编写实体类代码:
public class User {private String userName;private String userPwd;//一些基本的set方法在此就省略了@Overridepublic String toString() {return "This is a user object.";}
}
2.创建Spring的配置文件,在此配置文件下进行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"><!-- 配置service <bean> 配置需要创建的对象id :用于之后从spring容器获得实例时使用的class :需要创建实例的全限定类名--><bean id="bean的id(可自己随便取,一般都与实体类相同user)" class="注入bean的实体类的类路径名如(com.XXX.XXX.User)"> 可以在这段代码中属性注入如(username和pwd等)</bean>
</beans>
此时,我们就已经在spring容器中注入了我们User类的bean了,可以在代码中获得容器内User的实例对象了,下面第三步非必要性,即举例使用User的bean,此外,bean是一个强大的标签,里面有很多知识点,在此就不做多介绍了,大家就自行了解吧。
3.编写测试类进行测试
public class TestIoc {@Testpublic void runUser() {// 1. 加载Spring配置文件,根据创建对象ApplicationContext context = new ClassPathXmlApplicationContext("你的配置文件名,如(applicationContext.xml)");// 2. 得到配置创建的对象User user = (User) context.getBean("前面配置文件中的bean的id");System.out.println(user);user.add();}
}
至此,一个简单的IOC案例完成,在这个案例中,我们将一般程序实体类的实例化步骤省略了,将其交给实例化等管理控制操作交给了spring框架,我们只需要编写配置文件,即可调用相应的方法等。以上就是spring中的IOC控制反转的思想了。
AOP
AOP概念
百度百科的解释
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。-------------这是笔者从百度百科上拿过来的,比较官方性的解释,接下来谈谈我自己的理解吧!
个人理解
个人认为,AOP的出现是为了满足程序的可扩充性,即降低耦合性,什么意思呢?举个例子,比如我们的一个软件,随着业务的增加,需要增加某种功能,那这个时候,传统的方法思想就要改变很多基础的代码(即纵向修改),这是一个很大而又繁琐的工程量;如果应用AOP思想就能很好的解决这个问题。
AOP思想
AOP思想就是横向切入,什么意思呢?就是在我们需要的增加功能的逻辑代码块中,横向切入我们的功能模块,既不改变我们原来的代码也不用动用底层的基础实现,我们只需要指定一个切入点,切入我们的代码块,在编译时横向植入代码。
原理图(来源于网上)如下所示:
以上就是AOP和IOC的基本思想了,仅限笔者的个人理解,可能有理解错误的地方,还望指出!
谈谈自己对Spring中IOC和AOP的理解相关推荐
- Spring中IOC和AOP的详细解释(转)
原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...
- spring中IoC和AOP的实现
6.2 spring IoC IoC容器是Spring的核心.容器从配置文件中读取需要创建哪些对象,并在创建后按照要求把它们进行装配,通过这样的方法达到业务代码解耦的目的.不仅如此,spring还负责 ...
- Spring中IOC和AOP的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC就是典型的工厂模式,通过s ...
- Spring的IoC与AOP的理解
1.Spring它到底是什么? Spring是一个开源的Java应用程序开发框架,为了解决企业应用开发的复杂性而创建的. 在spring中,它会认为一切Java类都是资源,而资源就是Bean,容纳 ...
- Spring中IoC和DI的理解
通常情况下,Spring是学习者学完se部分马上就要面对的一个轻量级框架.实际上,Spring框架功能很强大,而IoC和AOP是两个比较重要的知识点.经过我一段时间学习感到IoC要比AOP容易理解.今 ...
- 解释Spring中IOC, DI, AOP
oc就是控制翻转或是依赖注入.通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象. aop就是面向切面的编程.比如 ...
- Spring框架:谈谈对IOC和AOP的理解
在java面试中,如果我们被问及Spring框架的相关问题,那么一定避不开对Spring中的IOC和AOP的理解和使用,本文就简单谈论对于Spring中IOC和AOP的理解. 一.IOC的理解 1.1 ...
- Java 第一大框架:Spring 的 IoC 跟 AOP 雏形如何实现?
Spring Spring make java more simple: Spring make java more modern: Spring make java more reactive: S ...
- Spring:IOC和AOP
Spring:IOC和AOP 一. IOC (1) 引入 (2) 定义 (3) 作用 (4) 实现 (5) DI依赖注入 二. AOP (1) 概念 (2) Spring中的AOP (3) 入门案例 ...
最新文章
- iOS MKMapView 地图视图
- select查询中@作用_SQL学习第四关:复杂查询
- a*算法的优缺点_五种聚类算法一览与python实现
- luogu3810 【模板】三维偏序(陌上花开)
- kibana从入门到精通-Kibana安装
- md发布test-1 md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-1md发布test-
- java ee cdi_Java EE CDI程序化依赖关系消歧示例–注入点检查
- c语言指针灵活性管窥
- php链表构造,用PHP实现单向链表结构
- java实现对象转换为map、xml字符串转化为map、map转化为xml字符串
- java生成txt_Java ThreadDump 生成解析
- Android模拟点击屏幕,实现按键精灵点击屏幕功能
- c++做病毒|教程代码
- 智能陈桥输入法软件测试,智能陈桥 for linux 版本发布
- 帆软报表更新到服务器控件展示不出来_报表工具软件FineReport常见问题与解答总结...
- 部署LAMP平台,构建企业web服务器
- 周志华机器学习(一)
- 双 JK 触发器 74LS112 逻辑功能。真值表_触发器的工作原理是什么
- 屏蔽拦截广告(二、Android软件推荐)
- 【转】Vmware 8.0注册码 序列号 key 注册方法
热门文章
- linux shuf 和mac gshuf
- git flow linux,Git Flow简介
- 简述QTP自动化测试框架
- java contains 效率_字符串中判断存在的几种模式和效率(string.contains、string.IndexOf、Regex.Match)...
- HTML和CSS面试题及答案总结一
- 【181207】C++工资管理系统(Access)源代码
- javascript 循环数组的六种方式
- AOV网络(有向图)----拓扑排序--判断有无环的问题--12月18日
- 重磅:蚂蚁借呗全面上征信了
- Dust3D项目实训五 | 基于modeloffscreenrender的画面渲染分析