spring 初步认识

spring目的:为了实现程序之间的解耦,实现new操作。因此,spring就是一个大工厂。

spring可以实现,dao层与service层的解耦,service层与factory的解耦。传统的方式在构造方法中new对象。

spring将工厂模式需要的类型class(具体的类)、识别号id都放在配置文件中,初始化时候找到spring的配置文件,读取参数,创建对象。

spring创建的对象是单例的。

例如:

domain对象:

public class Department {
	private Long id;
	private String name;
	//get set 方法,构造方法
}
dao接口:

public interface IDepartmentDAO {
	public void save(Department department);
	public void update(Department department);
}

dao实现:

public class DepartmentDAOHibImpl implements IDepartmentDAO {
	@Override
	public void save(Department department) {
		System.out.println("save department use hibernate ...");
	}
	@Override
	public void update(Department department) {
		System.out.println("update deparment use hibernate");
	}
}
public class DepartmentDAOJdbcImpl implements IDepartmentDAO{

	@Override
	public void save(Department department) {
		System.out.println("save department use jdbc...");
	}

	@Override
	public void update(Department department) {
		System.out.println("update department use jdbc....");
	}

}
service层:

public class DepartmentServiceImpl {

	private IDepartmentDAO DAO;

	//在配置文件中,告诉service要使用那个dao
	public void setDAO(IDepartmentDAO dAO) {
		DAO = dAO;
	}

	/**
	 * 构造方法中初始化
	 */
	/*public DepartmentServiceImpl() {
		//DAO = new DepartmentDAOJdbcImpl();//传统方式 第一种方式
		//初始化spring 第二种方式,这种方式没有实现service层与factory层的解耦
		Resource resource = new ClassPathResource("application.xml");    
		BeanFactory factory = new XmlBeanFactory(resource);
		DAO = factory.getBean("departmentDAOJdbc", IDepartmentDAO.class);
	}*/
	
	public void save(){
		System.out.println("save department and excute other service");
		DAO.save(new Department(1l, "username"));
	}
	

	public void update(){
		System.out.println("update department and excute other service");
		DAO.update(new Department(2l, "password"));
	}
	
}
配置文件:application.xml

<bean id="departmentDAOHib" class="com.Liaq.cd.DepartmentDAOHibImpl"/>    
  <bean id="departmentDAOJdbc" class="com.Liaq.cd.DepartmentDAOJdbcImpl"/>
  <bean id="departmentService" class="com.Liaq.cd.DepartmentServiceImpl">
  	<property name="DAO" ref="departmentDAOHib"></property>
  </bean>
junit4测试:

public class TestSpring {
	@Test
	public void test(){//查看spring代理dao
		//初始化spring
		Resource resource = new ClassPathResource("application.xml");    
		BeanFactory factory = new XmlBeanFactory(resource);
		//从工厂中得到bean
//		IDepartmentDAO departmentDAO = (IDepartmentDAO) factory.getBean("departmentDAOHib");
		IDepartmentDAO departmentDAO = factory.getBean("departmentDAOJdbc", IDepartmentDAO.class);
		departmentDAO.save(new Department());
	}
	@Test
	public void testService(){//spring 代理service层
		Resource resource = new ClassPathResource("application.xml");
		BeanFactory factory = new XmlBeanFactory(resource);
		//得到spring的bean
		DepartmentServiceImpl departmentService = (DepartmentServiceImpl) factory.getBean("departmentService");
		departmentService.save();
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值