Spring 框架核心概念IoC 随笔
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 随笔相关推荐
- Sg.js框架核心概念
Sg.js框架核心概念: 1)所有变量.方法.类对象全部都是从属于$g主树,由$g分支出很多$g.变量名.$g.方法.$g.对象id.$g.类: 2)获取控件内部属性必须使用公开的get方法获取,禁止 ...
- Spring框架的灵魂IOC和AOP
2019独角兽企业重金招聘Python工程师标准>>> 关键词 名称 模式 实现方式 IOC 依赖注入或控制反转 工厂模式 sessionfactory注入 AOP 面向切面编程 代 ...
- Spring框架基础概念(面试概念解答)
Spring框架概述 什么是Spring? 三层体系架构 Spring框架的优点 Spring的体系结构 Core Container(核心容器) Data Access/Integration(数据 ...
- Spring框架介绍和IOC介绍
一.Spring简介 1.什么是Spring?作用有什么? Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBea ...
- @select注解_SSM框架(十三):Spring框架中的IoC(3)新注解,完全摆脱xml文件
spring中的新注解 1.Configuration 作用:指定当前类是一个配置类 细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以 ...
- @kafkalistener中id的作用_SSM框架(十一):Spring框架中的IoC(1)
控制反转 IOC: 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Depende ...
- Spring框架核心思想
Spring两个核心解决思想方案解析 IOC (Inverstion Object Control)控制反转 / DI (Dependency Injected) 依赖注入 AOP(Aspect Or ...
- Spring框架02(IOC和DI)
目录 spring中的IOC和DI 1. BeanFactory 容器 2. ApplicationContext 容器 1)ClassPathXmlApplicationContext 2)File ...
- Spring框架核心之(一)Spring简介
Spring简介 一.什么是Spring Spring是一个轻量级开源框架,他是一个基于 ...
最新文章
- jupyter notebook上完美运行tensorflow、keras
- 马哥笔记-mysql
- 流动python - 字符串KMP匹配
- jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题
- java如何生成验证码
- Linux(CentOS)网络流量实时监控(iftop)
- linux转换大小写的脚本代码,文件名大小写转换的shell脚本
- zookeeper 异常 :stat is not executed because it is not in the whitelist. Connection closed b
- linux 进程 异常日志,linux后台启动程序,处理nohup日志太大的问题
- flash位图技术研究篇(3):移动缓冲区域
- 数据结构------图-----深度广度优先遍历
- 静态树表的查找(最优查找树和次优查找树)
- 6.后台验证码-session作用域
- win10商店下载主题壁纸提取
- 整数 (Integer)
- ebtables Basic examples
- PowerMill 2018三五轴编程+后处理制作视频教程
- k8s集群配置域名证书支持https与http
- Java基础之猫抓老鼠(继承)
- [英语] 一个有两个谓语动词的句子之拆解与分析
热门文章
- 系统安全及应用(账户安全控制,系统引导和登录,弱口令检测和登录控制,PAM认证,端口扫描,用户切换和提权)
- 史上最全的Linux常用——目录和文件管理命令——收藏这一篇就够了!(超全,超详细)
- java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园
- Linux Shell脚本 - 什么是Shell
- 计算机本地用户删除后怎么恢复,电脑本地磁盘盘符被隐藏C盘不见了恢复方法...
- python数据可视化的特点_Python数据可视化 pyecharts实现各种统计图表过程详解
- 道java_请问这道java里的这几个语句是什么意思
- avogadro_Avogadro
- echarts 树图样式美化_echarts树图tree改为流程图
- java uncked_使用FindBugs对SpringSide1.0m3进行分析的结果