Spring基础学习Bean工厂模式解耦

导读:本篇文章讲解 Spring基础学习Bean工厂模式解耦,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1.项目结构

Spring基础学习Bean工厂模式解耦

 代码编写:

//账户的持久层接口
public interface AccountDao {
    public void saveAccount();
}
//账户的持久层实现类
public class AccountDaoImpl implements AccountDao {
    @Override
    public void saveAccount() {
        System.out.println("你好啊!");
    }
}
//账户业务接口
@WebService
public interface IAccountService {
    //模拟保存账户
public void saveAccount();
}
//业务层实现类
public class IAccountServiceImpl implements IAccountService {

    private AccountDao accountDao = (AccountDao) BeanFactory.getBean("accountDao");
    public IAccountServiceImpl() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
    }
    @Override
    public void saveAccount() {
      accountDao.saveAccount();
    }
}

精华部分之Bean工厂:

//创建一个Bean对象的工厂
//Bean:在计算机中,有可重用组件的含义。
//javabean : 用java语言编写的可重用组件
//javabean >  实体类
//它就是创建我们的Service和dao对象的。

//第一个:  需要一个配置文件来配置我们的Service和dao
//        配置的配置:唯一标识=全限定类名(key=value)
//第二个:通过读取配置文件中配置的内容,反射创建对象
public class BeanFactory {

    private static Map<String, Object> beans;

    private static Properties properties;
//static代码块在启动时只会执行一次,这样所获取的Bean也不会重复去生产新的,至始至终只有一个Bean在活跃-------->单例对象
    static {
        try {
            //实例化对象
            properties = new Properties();
            //获取properties文件的流对象
            InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
//读取文件流
            properties.load(in);
            //实例化容器
            beans = new HashMap<String, Object>();
            //取出配置文件中的所有的key
            Enumeration keys = properties.keys();
            while (keys.hasMoreElements()) {
                //取出每个key
                String key = keys.nextElement().toString();
                //根据key取出value
                String beanPath = properties.getProperty(key);
                    Object values = Class.forName(beanPath).newInstance();
                    //把key和values存入容器之中
                    beans.put(key, values);
            }
        } catch (Exception e) {
            throw new ExceptionInInitializerError("初始化properties失败");
        }
    }

    //根据Bean名称获取bean对象
    public static Object getBean(String beanName) {
        return beans.get(beanName);
    }
}

main启动:

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

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        
                IAccountServiceImpl iAccountService = (IAccountServiceImpl) BeanFactory.getBean("accountService");
                iAccountService.saveAccount();
    }
}

bean.properties:

accountService=com.demo.service.impl.IAccountServiceImpl
accountDao=com.demo.dao.impl.AccountDaoImpl

结果:

Spring基础学习Bean工厂模式解耦

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/105095.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!