制御ばねの枠組みのIOC単純な実装反転

春に制御の反転を理解する方法

感じるためにケースを使用するには

古典SSMアーキテクチャサービス層、ビジネス層でインターフェースを実装し、DAO層インターフェースを呼び出すserviceimpl。

//dao层
public interface IAccountDao {

    /**
     *保存账户
     */
    void saveAccount();
}
//没用mybtais获取数据,直接自己实现dao层接口
public class AccountDaoImpl implements IAccountDao {

    @Override
    public void saveAccount() {
        System.out.println("保存了账户");
    }
}

//service层接口
public interface IAccountService {

    /**
     * 模拟保存
     */
    void saveAccount();
}

/**
 * @author DELL
 * 业务层实现类
 */
public class AccountServiceImpl implements IAccountService {

//    private IAccountDao accountDao = new AccountDaoImpl();

      private IAccountDao accountDao = (IAccountDao) BeanFactory.getBean("accountDao");

    @Override
    public void saveAccount() {
        accountDao.saveAccount();
    }
}

アナログコントローラ

public class Client {
    public static void main(String[] args) {
//        IAccountService ac = new AccountServiceImpl();
            IAccountService ac = (IAccountService) BeanFactory.getBean("accountService");
            ac.saveAccount();
    }
}

オブジェクトの2つのインスタンスは、上記のコード明らかな効果を逆転させることによって制御デカップリングIOCを反映するために取得する必要があります

/**
 * 一个创建bean对象的工厂
 * javabean =/= 实体类
 * 它就是创建我们service和dao对象的
 * 第一个 需要一个配置文件 来配置我们的servece和dao
 * 通过读取配置文件中的配置内容,反射创建对象
 * @author DELL
 */
public class BeanFactory {
    /**
     * 定义一个Properties
     */
    private static Properties props;

    /**
     * 定义一个Map,用于存放我们要创建的对象.我们把它称之为容器
     */
    private static Map<String,Object> beans;


    //使用静态代码块为Properties对象赋值
    static {
        try {
            props = new Properties();
            InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
            System.out.println(in+"工厂方法获得的数据");
            props.load(in);
            //实例化容器
            beans = new HashMap<String, Object>();
            //取出配置文件中所有的key
            Enumeration<Object> keys = props.keys();
            //遍历枚举
            while(keys.hasMoreElements()){
                String key = keys.nextElement().toString();
                //根据key获取value
                String beanPath = props.getProperty(key);
                //反射创建对象
                Object value = Class.forName(beanPath).newInstance();
                //把key和value存入容器之中
                beans.put(key,value);
            }

        } catch (Exception e ) {
            throw new ExceptionInInitializerError("初始化properties失败");
        }
    }

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

これで新しいメソッドpropertsとBeanFactory.class.getClassLoader()getResourceAsStream(「bean.properties」);.あなたは首長を理解するためにブログを表示することができます

PS:propertsが読んコンフィギュレーションファイルは、
他の人の理解propertsを再印刷します

BeanFactory.class.getClassLoader()を理解する方法。GetResourceAsStreamは
パスを取得することです

公開された17元の記事 ウォンの賞賛0 ビュー219

おすすめ

転載: blog.csdn.net/qq_44801336/article/details/104702533