使用构造器注入实体bean

在学习Spring的Ioc控制反转的时候看到了利用构造器注入实体bean,但是在项目中很少用到,最苦恼就是不知道学到的东西不知道在哪里用,先记录下来。谁能告诉我你们在项目中怎么用,嘎嘎。

 

业务bean

package service;

import java.sql.Savepoint;

import dao.OracleDao;

public class PersonServce {
	
	OracleDao oracleDao ;
	String name;
	//构造器
	public PersonServce(OracleDao oracleDao, String name) {
		super();
		this.oracleDao = oracleDao;
		this.name = name;
	}
	
	
	//打印出来好测试
	public void save() {
		oracleDao.save();
		System.out.println(name);
	}
	
	
	
	
}

 

模拟数据库bean

package dao;

public class OracleDao  {
	
	public static void save() {
		System.out.println("模拟Oracle的保存方法");
	}
	
	
	
}

  配置文件bean.xml

<?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-2.5.xsd">
          
		<bean id="oracleDao" class="dao.OracleDao"></bean>
		<!--constructor构造 arg参数 聪明吧嘻嘻-->
                <!--参数是从0开始的,如果是基本类型直接用value属性就可以-->
                <!--如果是自己定义的类型就得把类型写上,引用哪个对象-->
		<bean id="personServce" class="service.PersonServce">
			<constructor-arg index="0" type="dao.OracleDao" ref="oracleDao"></constructor-arg>
			<constructor-arg index="1" value="数据库"></constructor-arg>
		</bean>
          
</beans>

 

测试代码

package test;

import static org.junit.Assert.*;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import service.PersonServce;

public class TestPersonService {


	@Test
	public void test() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
		PersonServce personServce = (PersonServce)applicationContext.getBean("personServce");
		//打印出来模拟数据库的保存和 那个名字,证明注入成功了  嘻嘻
		personServce.save();
	}

}

 

   一开始我以为配置文件ref后面的值必须在前面有声明的,毕竟java是先声明后使用的嘛,后来发现不报错,自以为肯定是spring容器发现ref就去找后面引用的对象,没有实例化就先实例化这个。酷

你可能感兴趣的:(spring)