依赖注入模式其他模式
Posted zhuxudong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了依赖注入模式其他模式相关的知识,希望对你有一定的参考价值。
@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);
}
}
以上是关于依赖注入模式其他模式的主要内容,如果未能解决你的问题,请参考以下文章
Spring 基于自动装配的依赖注入详解 [自动装配模式搞不懂?来看就完了!!!][autowire 属性值详解][自动装配的 6 种模式]