标签:fresh 依赖 ram oid 属性注入 对象 构造方法 div 配置
可以到spring官网去下载最新的spring扎包。
现在作一个简单测试类,我使用的是idea,创建module时,勾选spring,写一个applicationContext.xml文件。
.xml文件里加入
<bean id="helloWorld" class="com.guigu.spring.beans.HelloWorld"> <property name="name" value="spring"></property> </bean>
把.xml文件和spring建立联系。
package com.guigu.spring.beans; /** * Created by Zhuxiang on 2020/5/9. */ public class HelloWorld { public String name; public HelloWorld() { System.out.println("HelloWorld is construct!"); } public void setName(String name) { this.name = name; } @Override public String toString() { return "HelloWorld{" + "name=‘" + name + ‘\‘‘ + ‘}‘; } }
package com.guigu.spring.beans; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Created by Zhuxiang on 2020/5/9. */ public class Main { public static void main(String[] args) { // HelloWorld helloWorld = new HelloWorld(); // helloWorld.setName("123"); ClassPathXmlApplicationContext c = new ClassPathXmlApplicationContext("applicationContext.xml"); HelloWorld helloWorld = (HelloWorld) c.getBean("helloWorld"); System.out.println(helloWorld); } }
运行之后成功。
IOC 前生 --- 分离接口与实现
IOC 前生 --- 采用工厂设计模式
IOC --- 采用反转控制
上面的例子就是用的ClassPathXmlApplicationContext类。
ApplicationContext 的主要实现类:
ClassPathXmlApplicationContext:从 类路径下加载配置文件
FileSystemXmlApplicationContext: 从文件系统中加载配置文件
ConfigurableApplicationContext 扩展于 ApplicationContext,新增加两个主要方法:refresh() 和 close(), 让 ApplicationContext 具有启动、刷新和关闭上下文的能力
ApplicationContext 在初始化上下文时就实例化所有单例的 Bean。 WebApplicationContext 是专门为 WEB 应用而准备的,它允许从相对于 WEB 根目录的路径中完成初始化工作
依赖注入的方式
Spring 支持 3 种依赖注入的方式
属性注入
构造器注入
工厂方法注入(很少使用,不推荐)
属性注入
属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象(上面.xml中的<property name="name" value="spring">"name"就是指bean里的setter方法的名字)
属性注入使用 <property> 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 <value> 子节点指定属性值
属性注入是实际应用中最常用的注入方式
构造器注入
通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。
构造器注入在 <constructor-arg> 元素里声明属性, <constructor-arg> 中没有 name 属性
按索引匹配入参:
按类型匹配入参:
注入属性值的细节
字面值:可用字符串表示的值,可以通过 <value> 元素标签或 value 属性进行注入。例子:<property name="name" value="spring">中的"spring"
基本数据类型及其封装类、String 等类型都可以采取字面值注入的方式。例子:<constructor-arg value="奥迪" type="java.lang.String"/>
若字面值中包含特殊字符,可以使用 <![CDATA[]]> 把字面值包裹起来。例子:把这样一个值显示出来<spring^^>,<property name="name" ><value><![CDATA[<spring^^>]]></value></property>
标签:fresh 依赖 ram oid 属性注入 对象 构造方法 div 配置
原文地址:https://www.cnblogs.com/zhuxiang1029/p/12862603.html