ioc

简单IOC容器实现

♀尐吖头ヾ 提交于 2020-02-10 20:44:14
前言 本文是为了学习 Spring IOC 容器的执行过程而写,不能完全代表 Spring IOC 容器,只是简单实现了容器的 依赖注入 和 控制反转 功能,无法用于生产,只能说对理解Spring容器能够起到一定的作用。 开始 创建项目 创建Gradle项目,并修改 build.gradle plugins { id 'java' id "io.franzbecker.gradle-lombok" version "3.1.0" } group 'io.github.gcdd1993' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' } 创建 BeanFactory BeanFactory 是IOC中用于存放bean实例以及获取bean的核心接口,它的核心方法是 getBean 以及 getBean 的重载方法,这里简单实现两个 getBean 的方法。 package io.github.gcdd1993.ioc.bean; /** * bean factory interface * * @author gaochen

5.Spring框架—IOC和AOP使用扩展

对着背影说爱祢 提交于 2020-02-10 18:56:19
Spring框架 — IOC和AOP使用扩展 1.多种方式实现依赖注入 构造函数注入 < bean id = " accountService " class = " com.accp.service.impl.accountServiceImpl " > < constructor-arg name = " name " value = " 张三 " > </ constructor-arg > < constructor-arg name = " age " value = " 18 " > </ constructor-arg > < constructor-arg name = " birthday " ref = " now " > </ constructor-arg > </ bean > 标签的属性: type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中的某个或某些参数 index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值,索引位置从0开始 name:用于指定给构造函数中指定名称的参数赋值 value:用于提供基本类型和String类型的数据 ref:用于指定其他bean类型的数据。它指的是在spring的IOC核心容器出现过的bean对象 使用set方法注入 < bean id = " accountService " class =

Spring框架-第一篇

隐身守侯 提交于 2020-02-10 18:49:42
目录 第一章:认识Spring 1.1-Spring是什么 1.2-Spring的发展历程 1.3-Spring的优势 1.4-Spring体系结构 第二章:IOC及作用 2.1-高内聚、低耦合 2.2-解耦的几种方式 第三章:使用spring的IOC解决程序耦合 3.1-准备 3.2-快速入门 3.3-Spring 基于XML的IOC细节 3.4-spring 的依赖注入 第一章:认识Spring 1.1-Spring是什么 Spring 是 分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC (Inverse Of Control: 反转控制)和 AOP (Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多 著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。 1.2-Spring的发展历程 1997 年 IBM 提出了 EJB 的思想 1998 年,SUN 制定开发标准规范 EJB1.0 1999 年,EJB1.1 发布 2001 年,EJB2.0 发布 2003 年,EJB2.1 发布 2006 年,EJB3.0 发布 Rod Johnson(spring

Spring学习2--依赖注入与Spring注入

馋奶兔 提交于 2020-02-10 16:44:55
依赖注入(dependency injection) 依赖 :指 bean对象的创建依赖于容器 ,bean对象的依赖资源。 注入 :指bean对象依赖的资源由容器来设置和 装配 (装配:引用其他已经设置的对象)。 Spring注入(两类) 构造器注入 (见ioc创建对象); 可通过type,value,name配置,参考 Spring的学习1 < bean id = "name" class = "User" > < constrouctor - arg index = "1" value = "你好" > < / constrouctor - arg > < bean > setter注入 ,要求被注入的属性必须有set方法。set方法的方法名由set属性首字母大写,如果是boolean,返回没方法,是is。 常量注入 < bean id = "student" class = "cn.my.vo.Student" > < property name = "name" value = "哇靠" > < / property > < / bean > bean注入 < bean id = "address" class = "cn.my.vo.Address" > < property name = "address" value = "北京" / > < / bean > <

注入(injector)

浪尽此生 提交于 2020-02-10 04:59:39
在java开发中有时候我们的一个类需要依赖另外一个类,这种就是依赖关系,创建对象的工作一般由spring容器来完成然后注入给调用者,这种就是依赖注入 。 Java依赖注入设计原则允许我们移除硬编码依赖和让我们的应用低耦合,可扩展和可维护。我们可以通过在Java中实现依赖注入将依赖关系从编译时移到运行时来解析。 Java依赖注入似乎很难通过理论来掌握。所以我将通过一些简单的例子,然后我们将会看到如何在应用里使用依赖注入模式来实现低耦合和可扩展性。 一个最好的setter依赖注入的例子是 Struts2 Servlet API Aware interfaces 到底是使用基于构造器依赖注入还是基于setter方法依赖注入取决于你的需求。举个例子,如果没有服务类我的应用完全不能运行,那么我会偏向基于构造器的DI,否则我会选择基于setter方法的DI,只有在真正需要才会使用它。 Java中的依赖注入是一种通过使对象从编译时绑定移到运行时绑定来实现控制反转(Inversion of control IoC)的一种方式。我们可以通过工厂模式(Factory Pattern), 模板方法设计模式(Template Method Design Pattern), 策略模式(Strategy Pattern)还有服务定位模式(Service Locator pattern)来实现IoC。

spring中IOC的bean对象相关

匆匆过客 提交于 2020-02-10 00:19:10
<?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"> <!--把对象的创建交给spring来管理--> <!--spring对bean的管理细节 1.创建bean的三种方式 2.bean对象的作用范围 3.bean对象的生命周期 --> <!--创建Bean的三种方式 --> <!-- 第一种方式:使用默认构造函数创建。 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。 采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。 <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean> --> <!

Spring IOC

我的梦境 提交于 2020-02-09 19:32:52
创建Bean 通过属性创建 实体类Category public class Category { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 实体类Product public class Product { private int id; private String name; private Category category; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Category getCategory() { return category; } public void

Spring IoC 容器和 bean 对象

和自甴很熟 提交于 2020-02-09 19:04:20
程序的耦合性: 耦合性(Coupling),又叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关 系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立 性)。 I o C容器 IoC 是 Inversion of Control 的缩写,即控制反转的意思,是解决程序耦合性的一种思想。通常创建对象的时候使用new关键字,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。解决程序耦合性的办法有很多,而依赖注入(DI)这一功能就是IOC思想的一种具体实现 Spring pom.xml配置: <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.0.RELEASE</version> </dependency> </dependencies> Spring 项目结构依赖: Spring bean.xml的配置: <?xml version="1.0" encoding="UTF-8"?>

关于spring中的依赖性注入的几种方法的见解

一个人想着一个人 提交于 2020-02-08 19:18:29
关于spring中的依赖性注入的几种方法的见解 IOC(inversion of Control): 是一种反转资源的获取方向,是容器主动提供组件获取的资源,而并非是自己创建。 组件所要做的就是选择一种方式来接收这个资源。 DI(Dependency injection): 组件以一些先定义好方式(例如setter方法)来接受来自容器的资源的注入 自认为是一种反射的机制。 注入演示 ioc: 二:配置bean 基于xml文件的注入 中的一些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" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org

Java面试题—中级(中)

半腔热情 提交于 2020-02-08 10:41:47
什么是线程死锁?死锁如何产生?如何避免线程死锁? 死锁的介绍: 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。 死锁的产生的一些特定条件: 1、互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放 。 2、请求和保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放。 3、不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用。 4、循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。 如何避免: 1、加锁顺序: 当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生。如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。当然这种方式需要你事先知道所有可能会用到的锁,然而总有些时候是无法预知的。 2、加锁时限: 加上一个超时时间,若一个线程没有在给定的时限内成功获得所有需要的锁,则会进行回退并释放所有已经获得的锁