Spring学习:程序的耦合和解耦的思路分析
2024-10-07 23:15:33
程序的耦合
耦合:程序间的依赖关系
包括:
类之间的依赖
方法间的依赖
解耦:
降低程序间的依赖关系
在实际开发中:
应该做到,编译期不依赖,运行时才依赖
解耦思路:
第一步:使用反射来创建对象,而避免使用new关键词
第二步:通过读取配置文件来获取要创建的对象全限定类名
创建BeanFactory
/**
* 一个创建Bean对象的工厂
*
* Bean:在计算机英语中,有可重用组件的含义
* JavaBean:用java语言编写的可重用组件
* javabean > 实体类
*
* 它就是创建我们的service的dao对象的
* 第一个:需要一个配置文件来配置我们的service和dao
* 配置的内容:唯一标识=全限定类名
* 第二个:通过读取配置文件中配置的内容,反射创建对象
*
* 配置文件可以是xml也可以是properties
*
*/
public class BeanFactory { //定义一个Properties对象
private static Properties props; //使用静态代码块为Properties对象赋值
static {
try {
//实例化对象
props = new Properties();
//获取properties文件的流对象,创建在resources文件夹下的properties文件会成为类根路径下的文件,不用写包名
InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
props.load(in);
} catch (Exception e) {
throw new ExceptionInInitializerError("初始化properties失败");
}
} /**
* 根据Bean的名称获取bean对象
* @param beanName
* @return
*/
public static Object getBean(String beanName){
Object bean = null;
try{
String beanPath = props.getProperty(beanName);
System.out.println(beanPath);
bean = Class.forName(beanPath).newInstance();
}catch (Exception e){
e.printStackTrace();
}
return bean;
} }
调用BeanFactory,反射创建对象
/**
* 账户业务层实现类
*/
public class AccountServiceImpl implements IAccountService { //private IAccountDao accountDao = new AccountDaoImpl();
private IAccountDao accountDao = (IAccountDao) BeanFactory.getBean("accountDao"); public void saveAccount(){
accountDao.saveAccount();
}
}
/**
* 模拟一个表现层,用于调用业务层
*/
public class Client { public static void main(String[] args) {
// IAccountService accountService = new AccountServiceImpl();
IAccountService accountService = (IAccountService) BeanFactory.getBean("accountService");
accountService.saveAccount();
}
}
最新文章
- POJ 3261 Milk Patterns 后缀数组求 一个串种 最长可重复子串重复至少k次
- git 使用 总结
- SQL优化注意事项
- Atitti.java android反编译解决方案-----虚拟机方案
- ActiveMQ学习(三)——MQ的通讯模式
- automapper初步
- windows 下双网卡在不同网络切换设置
- C# IList<;T>;转为DataTable
- 引用js或css后加?v= 版本号的用法(转)
- backboneJS 使用心得(2)view和model事件的多次绑定(转载)
- stylus or less ?
- 转 通过 spring 容器内建的 profile 功能实现开发环境、测试环境、生产环境配置自动切换
- python--DenyHttp项目(2)--ACM监考服务器端
- 根据Dockerfile创建docker dotnet coer 镜像
- angular.isString()
- SX_WIN10X64LTSB2016_EN_LITE英文精简版
- cmd下的一些小技巧
- iOS -- Effective Objective-C 阅读笔记 (1)
- 判断当前的Activity的是否处于栈顶
- 改BUG方法