导入jar包
org.springframework spring-context 5.3.7 junit junit 4.12 test
定义UserService、UserDao接口及其各自的实现类
package com.xxxx.lln.service;/*** UserService接口*/
public interface UserService {public void print();
}package com.xxxx.lln.service.serviceImpl;import com.xxxx.lln.dao.UserDao;
import com.xxxx.lln.dao.daoImpl.UserDaoImpl;
import com.xxxx.lln.service.UserService;
/*** UserService接口实现类*/
public class UserServiceImpl implements UserService {private UserDao userDao = new UserDaoImpl();@Overridepublic void print() {System.out.println("userService...");userDao.print();}
}
package com.xxxx.lln.dao;/*** UserDao接口*/
public interface UserDao {public void print();}package com.xxxx.lln.dao.daoImpl;import com.xxxx.lln.dao.UserDao;/*** UserDao接口实现类*/
public class UserDaoImpl implements UserDao {@Overridepublic void print() {System.out.println("userDao...");}
}
配置xml文件
创建BeanFactoryTest,加载配置文件,获取UserService
package com.xxxx.lln.test;import com.xxxx.lln.dao.UserDao;
import com.xxxx.lln.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;public class BeanFactoryTest {@Testpublic void test1() {//创建工厂对象DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();//创建一个读取器(xml文件)XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);//读取器配置文件给工厂reader.loadBeanDefinitions("bean1.xml");//根据id获取Bean实例对象UserService userService = (UserService) beanFactory.getBean("userService");System.out.println(userService);userService.print();UserDao userDao = (UserDao) beanFactory.getBean("userDao");System.out.println(userDao);userDao.print();}
}
Spring的IOC入门案例已经完成,但是在UserServiceImpl的类中依然存在UserDaoImpl对象的new操作,它们之间的耦合度还是比较高,这块该如何解决,就需要用到下面的DI:依赖注入
。
删除业务层中使用new的方式创建的dao对象,提供userDao的setter方法
package com.xxxx.lln.service.serviceImpl;import com.xxxx.lln.dao.UserDao;
import com.xxxx.lln.dao.daoImpl.UserDaoImpl;
import com.xxxx.lln.service.UserService;
import com.xxxx.lln.test.BeanFactoryTest;/*** UserService接口实现类*/
public class UserServiceImpl implements UserService {//private UserDao userDao = new UserDaoImpl();private UserDao userDao;public void setUserDao(UserDao userDao){System.out.println("BeanFactoryTest调用setUserDao该方法"+userDao);this.userDao = userDao;}@Overridepublic void print() {System.out.println("userService...");userDao.print();}
}
在配置文件中添加依赖注入的配置
运行程序调用方法
package com.xxxx.lln.test;import com.xxxx.lln.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class ApplicationContextTest {@Testpublic void test1() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");UserService userService = (UserService) applicationContext.getBean("userService");System.out.println(userService);}}
上一篇:cmd常用的操作命令
下一篇:我看ChatGPT