jar包准备
bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="stu1" className="cn.itcast.domain.Student">
<property name="number" value="s1001"/>
<property name="name" value="zhangSan"/>
<property name="age" value="18"/>
<property name="sex" value="男"/>
<property name="teacher" ref="t1"/><!--关联关系使用ref,值必须为关联的额bean的id-->
</bean>
<bean id="stu2" className="cn.itcast.domain.Student">
<property name="number" value="s1002"/>
<property name="name" value="wangWu"/>
<property name="age" value="18"/>
<property name="sex" value="男"/>
<property name="teacher" ref="t1"/><!--关联关系使用ref,值必须为关联的额bean的id-->
</bean>
<bean id="t1" className="cn.itcast.domain.Teacher">
<property name="tid" value="t1002"/>
<property name="tname" value="liSi"/>
<property name="sex" value="女"/>
<property name="salary" value="8000"/>
</bean>
<bean id="stuDao" className="cn.itcast.dao.impl.StudentDaoImpl2"></bean>
<bean id="stuService" className="cn.itcast.service.impl.StudentServiceImpl">
<property name="studentDao" ref="stuDao"/>
</bean>
</beans>
Demo1
package test;
import org.junit.Test;
import cn.itcast.beanfactory.BeanFactory;
import cn.itcast.dao.StudentDao;
import cn.itcast.dao.impl.StudentDaoImpl;
import cn.itcast.domain.Student;
import cn.itcast.service.StudentService;
public class Demo1 {
@Test
public void fun1() {
/*
* 1.创建Bean工厂,创建时需要给工厂指定配置文件
* 2.从工厂中获取bean对象
*/
BeanFactory bf = new BeanFactory("beans.xml");
Student s1 =(Student)bf.getBean("stu1");
Student s2 = (Student)bf.getBean("stu1");
System.out.println(s1==s2);
/*
*true,表示现在的工厂是单例,高版本的添加属性后可以创建多例
*/
}
@Test
public void fun2() {
/**
* 测试带ref
*/
BeanFactory bf = new BeanFactory("beans.xml");
Student s1 = (Student)bf.getBean("stu1");
Student s2 = (Student)bf.getBean("stu2");
System.out.println(s1.getTeacher()==s2.getTeacher());
//true 关联的老师也是单例的(关联的对象创建一次)
}
@Test
public void fun3() {
/**
* 面向接口编程(StuDao),解耦
*/
BeanFactory bf = new BeanFactory("beans.xml");
StudentDao sDaoImpl = (StudentDao)bf.getBean("stuDao");
sDaoImpl.add(null);
sDaoImpl.update(null);
}
@Test
public void fun4(){
/**
* 面向接口编程(StuService)
*/
BeanFactory bf = new BeanFactory("beans.xml");
StudentService service = (StudentService)bf.getBean("stuService");
service.login();
}
}
StudentDao .java
package cn.itcast.dao;
import cn.itcast.domain.Student;
public interface StudentDao {
public void add(Student s);
public void update(Student s);
}
StudentDaoImpl.java
package cn.itcast.dao.impl;
import cn.itcast.dao.StudentDao;
import cn.itcast.domain.Student;
public class StudentDaoImpl implements StudentDao {
@Override
public void add(Student s) {
System.out.println("StudentDaoImpl.add");
}
@Override
public void update(Student s) {
System.out.println("StudentDaoImpl.update");
}
}
StudentDaoImpl2 .java
package cn.itcast.dao.impl;
import cn.itcast.dao.StudentDao;
import cn.itcast.domain.Student;
public class StudentDaoImpl2 implements StudentDao {
@Override
public void add(Student s) {
System.out.println("StudentDaoImpl2.add");
}
@Override
public void update(Student s) {
System.out.println("StudentDaoImpl2.update");
}
}
StudentService .java
package cn.itcast.service;
public interface StudentService {
public void login();
}
StudentServiceImpl .java
package cn.itcast.service.impl;
import cn.itcast.dao.StudentDao;
import cn.itcast.service.StudentService;
public class StudentServiceImpl implements StudentService {
private StudentDao studentDao = null;
//谁调用service的方法,谁就先要调用本方法,传递studentDao,工厂给你完成
public void setStudentDao(StudentDao studentDao) {
this.studentDao = studentDao;
}
public void login() {
studentDao.add(null);
studentDao.update(null);
}
}