ioc

C# AOP学习笔记

只谈情不闲聊 提交于 2020-03-20 10:43:29
一、引言 IoC-Invertion of Control,即控制反转,是一种程序设计思想。 先初步了解几个概念: 依赖(Dependency) :就是有联系,表示一个类依赖于另一个类。 依赖倒置原则(DIP) :设计模式六大原则之一,是一种软件架构设计原则。 控制反转(IoC) :一种软件设计原则,上层对下层的依赖(即底层模块的获得)交给第三方。 依赖注入(DI) :实现IoC的一种方式、手段。 IoC容器 :依赖注入的框架,用来映射依赖,管理对象的创建和生存周期。 二、依赖 依赖就是有联系,有地方使用它就是有依赖它,下面看一个简单的示例: class Program { class BMW { public string Show() { return "宝马"; } } class ChinesePeople { private BMW bmw = new BMW(); public void Run() { Console.WriteLine($"今天开{bmw.Show()}上班"); } } static void Main(string[] args) { ChinesePeople people = new ChinesePeople(); BMW bmw = new BMW(); people.Run(); Console.Read(); } } View

转载关于IOC的理解

怎甘沉沦 提交于 2020-03-20 07:26:49
转载自:http://blog.csdn.net/m13666368773/article/details/7802126 一. IoC理论的背景    我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。   如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是 这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问 题,就可能会影响到整个齿轮组的正常运转。 齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临 更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。   耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。 为了解决对象之间的耦合度过高的问题

谈谈你对spring框架的理解?

无人久伴 提交于 2020-03-18 17:48:49
我认为spring 就是一个框架的集成器,通常使用spring 来管理action 层和DAO 层。Spring本身有很多的组件,比如:MVC、IOC、AOP、DaoSupport等等。IOC 本身也就是一个容器,它管理了所有的bean 和bean 之间的依赖关系。 IOC 也叫作控制反转,核心是BeanFactory。也就意味着IOC 是基于工厂模式设计的,同时这个工厂生产的bean 默认是单例的。如果想修改单例变成多实例,则需要修改bean 的scope属性,值是prototype。在没有使用IOC 以前,程序员需要自己在对应的类中new 相关依赖的对象。 比如UserAction依赖于UserService完成业务操作,而UserService又依赖于UserDAO完成数据库操作。所以需要在action 中new servcie,在service 中new DAO。这样的方式,是由程序员来管理了对象的生命周期和他们之间的依赖关系,耦合度很高,不利于程序的拓展。所以通过IOC 来管理bean 和依赖关系,可以解耦合。 我们将所有的action、service 和dao等类定义成IOC 的一个bean 组件,此时类的实例化就交给了IOC 的beanFactory,由工厂来负责实例化bean 的对象。IOC 有三种注入方式,属性注入、构造器注入和接口注入。接口注入只是spring

Spring框架知识总结-注入Bean的各类异常

℡╲_俬逩灬. 提交于 2020-03-18 11:26:36
某厂面试归来,发现自己落伍了!>>> 近日整合sping和hibernate框架时遇到了一系列的异常,本次主要说明一下spring框架可能出现的异常及解决方案。 我们借助sping强大的bean容器管理机制,通过BeanFactory轻松的实现javabean的生命周期管理,然而在配置管理的时候难免会遇到一些异常: 异常1:No qualifying bean of type […] found for dependency 例如将BeanB自动注入到BeanA @Component public class BeanA { @Autowired private BeanB dependency; … } 如果此时BeanB没有定义在sping的Cntextl里,那么在启动时候就会抛出异常: the no such bean definition exception : org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.baeldung.packageB.BeanB] found for dependency: expected at least 1 bean which qualifies as autowire candidate

基于注解对IOC案例的改进

别说谁变了你拦得住时间么 提交于 2020-03-17 07:58:29
一.改变的地方: 1.配置实体类注解,此时可以删除掉set方法,而是用注解Autowired注入数据 2.还有创造实例对象此时也采用注解,删除掉xml相关操作; 3.由于此时使用注解,所以要多一个context环境,告诉Spring构造容器时所要扫描的包; 二.问题 1.开发过程中,软件开发和软件测试是两个属性。junit单元测试中,集成了一个main方法。会判断那里有@Test。但是Junit不知道我们是否采用了Spring框架。但是没有IOC容器,使用Atuowired根本不会起作用,即无法实现注入。 2.Spring整合JUnit: 1.导入坐标Spring-test; 2.使用Spring提供的注解替换掉JUnit的main方法; @RunWith(); 3.告知Spring运行器,spring和IOC是给予注解还是xml配置的, @ContextConfiguration() locations:指定xml文件的位置,加上classpath关键字,表示在类路径下; classes‘’:指定注解所在的位置 注意:JUnit版本必须是4.12以上 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations= {"classpath:bean.xml"}) public class

获取spring容器IOC核心容器

孤街浪徒 提交于 2020-03-17 02:33:03
ApplicationContext的三个常用实现类 classPathXmlApplicationContext: 它可以加载路径下的配置文件,要求配置文件必须在类路径下。不在的话加载不了 FileSystemXmlApplicationContext: 它可以加载磁盘任意路径下的配置文件件(必须有访问权限) AnnotationConfigApplicationContext:它是用于读取注解创建容器的 核心容器的两个接口引发出的问题: 1、 ApplicationContext: 单例对象适用 它在构建核心容器时,创建对象采取的策略是采用立即加载的方式。也就是说,只要一读取配置文件马上就创建文件中配置的对象。 2、BeanFactory: 多例对象适用 它在构建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正的构建对象。 代码 public static void main ( String [ ] args ) { //1.获取核心容器对象 //ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); //2.根据id获取Bean对象 //IAccountService as = (IAccountService)ac.getBean

Java单体应用 - 常用框架 - 02.Spring

感情迁移 提交于 2020-03-17 01:54:16
原文地址: http://www.work100.net/training/monolithic-frameworks-spring.html 更多教程: 光束云 - 免费课程 Spring 序号 文内章节 视频 1 概述 - 2 体系结构 - 3 特点 - 4 Spring与IoC - 5 第一个Spring应用程序 - 请参照如上 章节导航 进行阅读 1.概述 Spring 的主要作用就是为代码“ 解耦 ”,降低代码间的耦合度。 根据功能的不同,可以将一个系统中的代码分为 主业务逻辑 与 系统级业务逻辑 两类,它们各自具有鲜明的特点: 主业务代码间逻辑联系紧密,有具体的专业业务应用场景,复用性相对较低; 系统级业务相对功能独立,没有具体的专业业务应用场景,主要是为主业务提供系统级服务,如日志、安全、事务等,复用性强。 Spring 根据代码的功能特点,将降低耦合度的方式分为了两类: IoC 与 AOP 。 IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring 容器统一管理,自动“注入”。 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。 Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架

Castle 开发系列文章

烂漫一生 提交于 2020-03-17 00:32:28
http://www.cnblogs.com/Terrylee/archive/2006/04/28/387503.html Castle 是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架、AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程序提供了很好的服务。4月份以来,Terrylee写了一系列的Castle的文章,这里做一下总结,后续还有Facility系列等,本部分内容会不断的更新。 第一部分:ActiveRecord学习实践系列 1 . Castle ActiveRecord 学习实践(1 ):快速入门指南 2 . Castle ActiveRecord 学习实践(2 ):构建配置信息 3 . Castle ActiveRecord 学习实践(3 ):映射基础 4 . Castle ActiveRecord 学习实践(4 ):实现One-Many 关系的映射 5 . Castle ActiveRecord 学习实践(5 ):实现Many–Many 关系的映射 6 . Castle ActiveRecord 学习实践(6 ):延迟加载和使用Where 子句 7 . Castle ActiveRecord 学习实践(7 ):使用HQL 查询 8 . Castle ActiveRecord 学习实践(8 )

Spring面试题

假如想象 提交于 2020-03-16 09:16:59
69道Spring面试题和答案 原文地址 译者:深海(1422207401@qq.com) 校对:方腾飞 目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 2. 使用Spring框架的好处是什么? 轻量: Spring 是轻量的,基本的版本大约2MB。 控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。 面向切面的编程(AOP): Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。 容器: Spring 包含并管理应用中对象的生命周期和配置。 MVC框架 :Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。 事务管理: Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。 异常处理: Spring 提供方便的API把具体技术相关的异常(比如由JDBC

Spring学习笔记

白昼怎懂夜的黑 提交于 2020-03-16 08:57:42
Spring 概述 Spring是什么? Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以 IoC——Inverse Of Control:反转控制 AOP——Aspect Oriented Programming:面向切面编程 为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。 Spring的优势 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。 AOP编程的支持 通过Spring的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。 声明式事务的支持 可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量。 方便程序的测试 可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。 方便集成各种优秀框架 Spring可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate