十一假期重新复习spring知识点,做个记录后期回顾使用。
一、测试模块结构如图:
二、具体代码
2.1接口 package com.bank.dao; public interface IUserDao { int addInsert(); }
package com.bank.service; public interface IUserService { int addUserService(); }
2.2实现类
package com.bank.dao.impl; import com.bank.dao.IUserDao; public class UserDaoImpl implements IUserDao { public int addInsert() { System.out.println("UserDaoImpl 执行了..." ); return 0; } }
package com.bank.service.impl; import com.bank.dao.IUserDao; import com.bank.factory.BeanFactory; import com.bank.service.IUserService; public class UserServiceImpl implements IUserService { public int addUserService() { System.out.println(" UserServiceImpl 执行了 ...... "); //通过单例工厂获取对象IUserDao IUserDao userDao = BeanFactory.getBeanImpl(IUserDao.class); userDao.addInsert(); return 0; } }
2.3工厂类
2.3.1单例工厂
package com.bank.factory; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.ResourceBundle; public class BeanFactory { private static final Map<String, Object> beanFactory = new HashMap<String, Object>(); static { try { //1.加载配置文件 ResourceBundle config = ResourceBundle.getBundle("config"); //获取Key值和value Enumeration<String> keys = config.getKeys(); while (keys.hasMoreElements()) { //获取key String key = keys.nextElement(); //获取value String value = config.getString(key); //将value转化为对象 Class<?> aClass = Class.forName(value); Object instance = aClass.newInstance(); //将值放入map中 beanFactory.put(key, instance); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } public static <T> T getBeanImpl(Class<T> iClass) { //获取接口类名 String name = iClass.getSimpleName(); //根据类名获取对象并返回 T t = (T) beanFactory.get(name); return t; } }
2.3.2多例工厂
package com.bank.factory; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.ResourceBundle; public class BeanFactoryMuti { private static final Map<String,String> beanFatory=new HashMap<String,String>(); static { try { //加载配置文件 ResourceBundle config = ResourceBundle.getBundle("config"); //获取Key值和value Enumeration<String> keys = config.getKeys(); while (keys.hasMoreElements()){ String key = keys.nextElement(); String value = config.getString(key); //将值放入map中 beanFatory.put(key,value); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } public static <T> T getBeanImpl(Class<T> iClass) throws Exception { String name = iClass.getSimpleName(); String s = beanFatory.get(name); Class<?> aClass = Class.forName(s); T t = (T) aClass.newInstance(); return t; } }
2.4测试类
package com.bank.test; import com.bank.factory.BeanFactory; import com.bank.factory.BeanFactoryMuti; import com.bank.service.IUserService; import org.junit.Test; public class UserServiceTest { @Test public void test01() { IUserService userService = BeanFactory.getBeanImpl(IUserService.class); userService.addUserService(); } @Test public void test02(){ for (int i = 0; i <10 ; i++) { IUserService userService = BeanFactory.getBeanImpl(IUserService.class); System.out.println("userService = " + userService); } } @Test public void test03() throws Exception { IUserService userService = BeanFactoryMuti.getBeanImpl(IUserService.class); userService.addUserService(); } @Test public void test04() throws Exception { for (int i = 0; i <10 ; i++) { IUserService userService = BeanFactoryMuti.getBeanImpl(IUserService.class); System.out.println("userService = " + userService); } } }
2.5配置文件
config.properties
IUserDao=com.bank.dao.impl.UserDaoImpl IUserService=com.bank.service.impl.UserServiceImpl
pom.xml
<dependencies> <!--Spring的核心包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.5.RELEASE</version> </dependency> <!--junit包--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency>
三、测试结果
单例工厂:
如同验证单例工厂(获取的对象只有一个)
多例工厂:
多例工厂验证(每次都是一个新的对象)