我对 Spring MVC 中的依赖注入(inject)感到困惑。
第一个代码:-
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private Userdao udo;
@Override
@Transactional
public List<Positions> plist() {
return udo.plist();
}
}
工作正常。 我想在这个类中实现依赖注入(inject)。我这样做是对还是错?
第二个代码:-
`@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private Userdao udo;
public UserServiceImpl(Userdao udo) {
this.udo = udo;
}
@Override
@Transactional
public List<Positions> plist() {
return udo.plist();
}
}
它不工作。 ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.xxx.Services.UserService com.xxx.java.HomeController.uservice; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceImpl' defined in file [D:\xxxWorkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\abcd\WEB-INF\classes\com\xxx\ServiceImp\UserServiceImpl.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.xxx.ServiceImp.UserServiceImpl]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.xxx.ServiceImp.UserServiceImpl.<init>()
我是初学者。请帮我解决这个问题。如何在 Spring MVC 中实现 DI。
最佳答案
您可以通过两种方式执行此操作。
您可以使用基于字段的 Autowiring 。但在这种情况下,您将需要一个默认构造函数。
@Service @Transactional public class UserServiceImpl implements UserService { @Autowired // field based DI private Userdao udo; // default constructor public UserServiceImpl() {} @Override @Transactional public List<Positions> plist() { return udo.plist(); } }
您可以使用基于构造函数的依赖注入(inject)。为此,只需将 @Autowire 注释移至构造函数即可。并将其从字段中删除。
@Service @Transactional public class UserServiceImpl implements UserService { private Userdao udo; @Autowired // constructor based DI public UserServiceImpl(Userdao udo) { this.udo = udo; } @Override @Transactional public List<Positions> plist() { return udo.plist(); } }
关于java - 如何在Spring MVC中实现DI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43393729/