不使用new 进行创建实例对象
public class BeanFactory {
private static ResourceBundle bundle;
static {
// 加载配置文件
bundle = ResourceBundle.getBundle("applicationContext");
String userService = bundle.getString("userService");
System.out.println("userService = " + userService);
}
public static UserService getUserServiceImpl() {
UserService userService = null;
try {
Class<?> clazz = Class.forName(bundle.getString("userService"));
userService = (UserService) clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return userService;
}
public static UserMapper getUserMapperImpl() {
UserMapper userMapper = null;
try {
Class<?> clazz = Class.forName(bundle.getString("userMapper"));
userMapper = (UserMapper) clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return userMapper;
}
}
通过使用泛型对工厂进一步优化
public class NewBeanFactory {
private static ResourceBundle bundle;
static {
// 加载配置文件
bundle = ResourceBundle.getBundle("applicationContext");
String userService = bundle.getString("userService");
System.out.println("userService = " + userService);
}
public static Object getBean(String key) {
Object object = null;
try {
Class<?> clazz = Class.forName(bundle.getString(key));
object = clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return object;
}
// 泛型
public static <T> T getBean(String key,Class<T> tClass) {
Object object = null;
T cast=null;
try {
Class<?> clazz = Class.forName(bundle.getString(key));
object = clazz.newInstance();
cast = tClass.cast(object);
} catch (Exception e) {
e.printStackTrace();
}
return cast;
}
}
使用Spring管理
1.引入依赖
<!--spring 依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.20</version>
</dependency>
2.创建配置文件applicationContext
<?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.xsd">
<!--使用标签声明 需要托管的对象-->
<bean id="userService" class="cn.kgc.spring.basic.UserServiceImpl"></bean>
<bean id="userMapper" class="cn.kgc.spring.basic.UserMapperImpl"></bean>
<!--项目中的entity包装的类 一般不会纳入spring容器管理
原因: 实体类对应是数据库中的表
实体类的重要作用是用于封装持久化层的数据
持久层框架 会自动完成对象的创建和数据的封装
所以 一般在项目中不会将 实体类放入spring容器
-->
</beans>