码迷,mamicode.com
首页 > 其他好文 > 详细

依赖注入模式【其他模式】

时间:2019-01-05 21:34:02      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:rac   new   current   软件组件   test   配置   rda   add   als   

@SuppressWarnings("boxing")
public class DependencyInjection {
    /**
     * Dependency Injection Pattern【依赖注入模式】:保持软件组件之间的松散耦合【低类间耦合】
     */
    @Test
    public void all() {
        final Injector injector = Guice.createInjector(new UserModule());
        final UserDao userDao = injector.getInstance(UserDao.class);
        final long id = 1L;
        final String name = "zxd";
        userDao.add(User.of(id, name));
        Optional<User> user = userDao.getById(1L);
        assertTrue(user.isPresent());
        assertEquals(name, user.get().getName());
        userDao.remove(id);

        user = userDao.getById(id);
        assertFalse(user.isPresent());
    }
}

@Value(staticConstructor = "of")
class User {
    private Long id;
    private String name;
}

interface UserDao {
    int add(User user);

    Optional<User> getById(Long id);

    int remove(Long id);
}

class DataStore {
    private final ConcurrentMap<Long, User> USERS = new ConcurrentHashMap<>();

    public User getById(Long id) {
        return USERS.get(id);
    }

    public void persist(User user) {
        USERS.put(user.getId(), user);
    }

    public void remove(Long id) {
        USERS.remove(id);
    }
}

class UserDaoImpl implements UserDao {
    /**
     *  通过 Juice 的 @Inject 注解完成注入
     */
    @Inject
    private DataStore dataStore;

    @Override
    public int add(User user) {
        dataStore.persist(user);
        return 1;
    }

    @Override
    public Optional<User> getById(Long id) {
        return Optional.ofNullable(dataStore.getById(id));
    }

    @Override
    public int remove(Long id) {
        dataStore.remove(id);
        return 1;
    }
}
class UserModule extends AbstractModule {
    @Override
    protected void configure() {
        // 配置绑定关系,用于创建实例和依赖注入
        bind(DataStore.class).toInstance(new DataStore());
        bind(UserDao.class).to(UserDaoImpl.class);
    }
}

依赖注入模式【其他模式】

标签:rac   new   current   软件组件   test   配置   rda   add   als   

原文地址:https://www.cnblogs.com/zhuxudong/p/10225973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!