我想自动连接由工厂模式初始化的类中的存储库。
让我解释一步一步。
我的存储库类:
@Repository
public class UserRepository {
//
}
使用存储库类并扩展某些Abstract类的其他类:
public class OtherClass extends AbstractClass {
@Autowired
private UserRepository userRepository;
//
}
现在,我在Factory类上创建了该类,并初始化了OtherClass并放入了一张地图。
@Component
public class TempFactory {
private final Map<Class, AbstractTest> impletationMap = new HashMap<>();
@Autowired
ApplicationContext context;
@PostConstruct
public void initialize() {
populateDataMapperMap(context.getBeansOfType(AbstractTest.class).values().iterator());
}
private void populateDataMapperMap(final Iterator<AbstractClass> classIterator) {
while (classIterator.hasNext()) {
AbstractTest abstractClassImpl = (AbstractClass) classIterator.next();
impletationMap.put(abstractClassImpl.getClass(), abstractClassImpl);
}
}
}
现在,这里的问题是放在impletationMap中的对象没有自动装配userRepository并返回null。
Output:
Otherclass oc = (AbstractClass)impletationMap.get("key")
userRepository is null in oc object.
我通过This link
来到了这个解决方案请告诉我如何继续进行。
谢谢。
答案 0 :(得分:0)
您应该使用@Component注释OtherClass。
我尝试了一下。这是我的代码,希望这可以为您提供帮助。
public class AbstractClass {
}
@Component
public class OtherClass extends AbstractClass {
@Autowired
UserRepository userRepository;
public UserRepository getUserRepository() {
return userRepository;
}
}
@Component
public class TempFactory {
private final Map<Class, AbstractClass> impletationMap = new HashMap<>();
@Autowired
ApplicationContext context;
public Map<Class, AbstractClass> getImpletationMap() {
return impletationMap;
}
@PostConstruct
public void initialize() {
populateDataMapperMap(context.getBeansOfType(AbstractClass.class).values().iterator());
}
private void populateDataMapperMap(final Iterator<AbstractClass> classIterator) {
while (classIterator.hasNext()) {
AbstractClass abstractClassImpl = classIterator.next();
impletationMap.put(abstractClassImpl.getClass(), abstractClassImpl);
}
}
}
@Repository
public class UserRepository {
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContext.xml")
public class ATest {
@Autowired
TempFactory tempFactory;
@Test
public void test() {
OtherClass otherClass = (OtherClass) tempFactory.getImpletationMap().get(OtherClass.class);
UserRepository userRepository = otherClass.getUserRepository();
Assert.assertNotNull(userRepository);
}
}