IoC = DI(Dependency Injection ) + 生命周期钩子事件 + 外部配置 ...

IoC核心设计模式

Factory 模式和 Observer 模式,强制使用 依赖注入 模式。

DI原则

1/2 高层模块不应该依赖低层模块,而是依赖抽象,低层模块也应该依赖抽象。 比如 controller 依赖 IXXXService ,而不是依赖 XXXServiceImpl。

DI注入方式

  • 1 Setter注入
  • 2 构造注入
  • 3 接口注入 spring没有实现 avalon有实现
  • go cloud —— wired 可能是第4种

POJO 注册成 Bean

public class DefaultMessage {private String message = "Spring is fun.";/*** Gets message.*/public String getMessage() {return message;}/*** Sets message.*/public void setMessage(String message) {this.message = message;}}
复制代码
<?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="message"class="org.springbyexample.di.xml.DefaultMessage" /></beans>复制代码

构造注入

public class ConstructorMessage {private String message = null;/*** Constructor*/public ConstructorMessage(String message) {this.message = message;}/*** Gets message.*/public String getMessage() {return message;}/*** Sets message.*/public void setMessage(String message) {this.message = message;}}
复制代码
<?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="message"class="org.springbyexample.di.xml.ConstructorMessage"><constructor-arg value="Spring is fun." /></bean></beans>
复制代码

Setter注入

public class SetterMessage {private String message = null;/*** Gets message.*/public String getMessage() {return message;}/*** Sets message.*/public void setMessage(String message) {this.message = message;}}复制代码
<?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="message"class="org.springbyexample.di.xml.SetterMessage"><property name="message" value="Spring is fun." /></bean></beans>
复制代码

Bean跟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="springMessage" class="java.lang.String"><constructor-arg value="Spring is fun." /></bean><bean id="message"class="org.springbyexample.di.xml.SetterMessage"><property name="message" ref="springMessage" /></bean></beans>复制代码



从外部配置启动应用程序

Spring可以加载来自

  • classpath
  • file sys
  • ftp
  • http
  • ...任何外部的配置文件

ApplicationContext是应用程序级别,BeanFactory是系统级别。 使用 AppCtx 不同实现,比如 ClassPathXmlApplicationContext

public class MessageRunner {final static Logger logger = LoggerFactory.getLogger(MessageRunner.class);/*** Main method.*/public static void main(String[] args) {logger.info("Initializing Spring context.");ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/application-context.xml");logger.info("Spring context initialized.");Message message = (Message) applicationContext.getBean("message");logger.debug("message='" + message.getMessage() + "'");}}
复制代码
<?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="message"class="org.springbyexample.di.app.Message"><property name="message" value="Spring is fun." /></bean></beans>
复制代码



单元测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class SetterMessageTest {final Logger logger = LoggerFactory.getLogger(SetterMessageTest.class);@Autowiredprivate SetterMessage message = null;/*** Tests message.*/@Testpublic void testMessage() {   assertNotNull("Constructor message instance is null.", message);String msg = message.getMessage();assertNotNull("Message is null.", msg);String expectedMessage = "Spring is fun.";assertEquals("Message should be '" + expectedMessage + "'.", expectedMessage, msg);logger.info("message='{}'", msg);}}复制代码
<?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="message"class="org.springbyexample.di.xml.SetterMessage"><property name="message" value="Spring is fun." /></bean></beans>
复制代码

获取源代码文件

github.com/spring-by-e…

1/ 注意如果使用IDEA , 使用改命令转换

mvn idea:idea
复制代码

转载于:https://juejin.im/post/5cdfad886fb9a07ea567beeb

Spring 框架核心概念IoC 随笔相关推荐

  1. Sg.js框架核心概念

    Sg.js框架核心概念: 1)所有变量.方法.类对象全部都是从属于$g主树,由$g分支出很多$g.变量名.$g.方法.$g.对象id.$g.类: 2)获取控件内部属性必须使用公开的get方法获取,禁止 ...

  2. Spring框架的灵魂IOC和AOP

    2019独角兽企业重金招聘Python工程师标准>>> 关键词 名称 模式 实现方式 IOC 依赖注入或控制反转 工厂模式 sessionfactory注入 AOP 面向切面编程 代 ...

  3. Spring框架基础概念(面试概念解答)

    Spring框架概述 什么是Spring? 三层体系架构 Spring框架的优点 Spring的体系结构 Core Container(核心容器) Data Access/Integration(数据 ...

  4. Spring框架介绍和IOC介绍

    一.Spring简介 1.什么是Spring?作用有什么? Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBea ...

  5. @select注解_SSM框架(十三):Spring框架中的IoC(3)新注解,完全摆脱xml文件

    spring中的新注解 1.Configuration 作用:指定当前类是一个配置类 细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以 ...

  6. @kafkalistener中id的作用_SSM框架(十一):Spring框架中的IoC(1)

    控制反转 IOC: 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Depende ...

  7. Spring框架核心思想

    Spring两个核心解决思想方案解析 IOC (Inverstion Object Control)控制反转 / DI (Dependency Injected) 依赖注入 AOP(Aspect Or ...

  8. Spring框架02(IOC和DI)

    目录 spring中的IOC和DI 1. BeanFactory 容器 2. ApplicationContext 容器 1)ClassPathXmlApplicationContext 2)File ...

  9. Spring框架核心之(一)Spring简介

                                                            Spring简介 一.什么是Spring Spring是一个轻量级开源框架,他是一个基于 ...

最新文章

  1. jupyter notebook上完美运行tensorflow、keras
  2. 马哥笔记-mysql
  3. 流动python - 字符串KMP匹配
  4. jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题
  5. java如何生成验证码
  6. Linux(CentOS)网络流量实时监控(iftop)
  7. linux转换大小写的脚本代码,文件名大小写转换的shell脚本
  8. zookeeper 异常 :stat is not executed because it is not in the whitelist. Connection closed b
  9. linux 进程 异常日志,linux后台启动程序,处理nohup日志太大的问题
  10. flash位图技术研究篇(3):移动缓冲区域
  11. 数据结构------图-----深度广度优先遍历
  12. 静态树表的查找(最优查找树和次优查找树)
  13. 6.后台验证码-session作用域
  14. win10商店下载主题壁纸提取
  15. 整数 (Integer)
  16. ebtables Basic examples
  17. PowerMill 2018三五轴编程+后处理制作视频教程
  18. k8s集群配置域名证书支持https与http
  19. Java基础之猫抓老鼠(继承)
  20. [英语] 一个有两个谓语动词的句子之拆解与分析

热门文章

  1. 系统安全及应用(账户安全控制,系统引导和登录,弱口令检测和登录控制,PAM认证,端口扫描,用户切换和提权)
  2. 史上最全的Linux常用——目录和文件管理命令——收藏这一篇就够了!(超全,超详细)
  3. java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园
  4. Linux Shell脚本 - 什么是Shell
  5. 计算机本地用户删除后怎么恢复,电脑本地磁盘盘符被隐藏C盘不见了恢复方法...
  6. python数据可视化的特点_Python数据可视化 pyecharts实现各种统计图表过程详解
  7. 道java_请问这道java里的这几个语句是什么意思
  8. avogadro_Avogadro
  9. echarts 树图样式美化_echarts树图tree改为流程图
  10. java uncked_使用FindBugs对SpringSide1.0m3进行分析的结果