1.Spring的解耦

1.what

程序之间的大量耦合,不利于开发维护,所以我们需要解耦


 * 程序的耦合
 *      耦合:程序间的依赖关系
 *          包括:
 *              类之间的依赖
 *              方法间的依赖
 *      解耦:
 *          降低程序间的依赖关系
 *      实际开发中:
 *          应该做到:编译期不依赖,运行时才依赖。
 *      解耦的思路:
 *          第一步:使用反射来创建对象,而避免使用new关键字。
 *          第二步:通过读取配置文件来获取要创建的对象全限定类名
 *

2.why

利用spring的工厂模式,可以帮助我们解耦

3.code

  1. Factory
public class BeanFactory {
    public static Properties prop;
    //来一个存放类的容器
    /**
     * beans容器的引入在加载工厂时就将配置文件中所有的类都加载放入到beans中
     * 且由于static代码块只执行一次,则这个类的对象属于单例模式,在多线程中会提高service层和dao层的执行效率
     * 且service层和dao层一般没有成员变量,所以不会引起线程安全问题!
     */
    private static Map<String,Object> beans;

    static {
        try {
            prop = new Properties();
            InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");//利用这个工厂的类来得到配置文件
            prop.load(in);//加载配置文件
            beans = new HashMap<String,Object>();
            Enumeration<Object> keys = prop.keys();//读取所有的key,key的容器
            while(keys.hasMoreElements()){//判断是否还有指针
                String key = keys.nextElement().toString();//获得当前指针的String
                String property = prop.getProperty(key);//在配置文件中对应key的全类名
                Object value = Class.forName(property).newInstance();//利用反射得到这个类
                beans.put(key,value);//将这个类的key和对象放入到beans容器中
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Object getBean(String beanName){
        return beans.get(beanName);
    }
}

  1. properties
AccountDao=dao.imp.AccountDaoImp
AccountService=service.imp.AccountServiceImp

3.业务层的BeanFactory使用

/**
 * 模拟一个表现层,用于调用业务层
 */
public class Client {

    public static void main(String[] args) {
        //IAccountService as = new AccountServiceImpl();
        for(int i=0;i<5;i++) {
            IAccountService as = (IAccountService) BeanFactory.getBean("accountService");
            System.out.println(as);
            as.saveAccount();
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值