#spring(2)IOC/DI,构造器参数注入,按照名字,类自动注入,Spring基本值注入,利用Spring配置数据源, 集合注入,读取Properties文件,Spring 表达式,注解

## IOC/DI

DI 的优势:解耦

紧耦合:软件组件之间是紧密依赖,很难拆分

松耦合:软件组件之间是松散依赖,随时可以更换

解耦:将软件组件从紧耦合转换为松耦合关系。

### IOC、DI

利用Spring 管理光头强和工具之间的依赖关系

1. 创建工具接口

/**
		 * 工具接口 
		 */
		public interface Tool {
		
		}

2. 创建具体的工具 斧子

public class Axe implements Tool, Serializable {
			
			@Override
			public String toString() {
				return "斧子";
			}
		}

3. 创建锯

public class Saw implements Tool, Serializable{
			
			@Override
			public String toString() {
				return "电锯";
			}
		}

4. 创建工人类型

public class Worker implements Serializable {
			
			private String name; //基本值
			
			private Tool tool;   //Bean 对象
			
			private int age;     //基本值,
			
			
			public Worker() {
				name = "光头强";
			}
			
			public Worker(String name) {
				super();
				this.name = name;
			}
		
			public void setTool(Tool tool) {
				this.tool = tool;
				System.out.println("setTool:"+tool);
			}
			public Tool getTool() {
				return tool;
			}
			
			public String getName() {
				return name;
			}
		
			public void setName(String name) {
				this.name = name;
				System.out.println("setName:"+name);
			}
		
			public int getAge() {
				return age;
			}
		
			public void setAge(int age) {
				this.age = age;
				System.out.println("setAge:"+age);
			}
		
			public void work() { //测试方法
				System.out.println(name+"使用"+tool+"砍树"); 
			}
			@Override
			public String toString() {
				return "Worker [name=" + name + ", tool=" + tool + "]";
			}
		}

5. 在Spring配置文件中利用 IOC/DI 解决依赖关系

<!-- 控制反转 IOC:由Spring创建对象称为控制反转 -->
		<bean id="axe" class="day02.Axe"/>	
		<bean id="saw" class="day02.Saw"/>
		<bean id="qiang" class="day02.Worker">
			<!-- 依赖注入DI:由Spring帮助建立对象的依赖关系 -->
			<!-- spring会自动调用 setTool 方法注入 axe 引用 -->
			<property name="tool" ref="saw"/> 
		</bean>

6. 测试

public class TestCase {
		
			ClassPathXmlApplicationContext ctx;
			
			@Before
			public void init() {
				ctx=new ClassPathXmlApplicationContext(
						"applicationContext.xml");
			}
			
			@After
			public void destroy() {
				ctx.close();
			}
			
			@Test
			public void testQiang() {
				Worker qiang = ctx.getBean("qiang",Worker.class);
				qiang.work();
			}	
			
		}

### 构造器参数注入

Spring支持 利用 构造器创建对象:constructor-arg 子元素,其中index="0"用于指定参数在构造器参数的位置。

1. 配置

<bean id="xiong" class="day02.Worker" lazy-init="true">
			<!-- 构造器参数注入,也就是调用有参数
			构造器创建对象 -->
			<constructor-arg index="0" value="熊大"/>
			<property name="tool" ref="saw"/> 
		</bean>

2. 测试

@Test
		public void testXiong() {
			Worker xiong = ctx.getBean("xiong",Worker.class);
			xiong.work();
		}

### 按照名字自动注入

Spring支持自动按照名字注入功能,Spring会自动检查Bean属性和Bean ID的匹配,如果匹配上就自动完成注入

优点:自动注入可以减少XML文件的编写量。

1. 编写配置文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值