I know there are so many similar questions about this. I looked through a lot of them but the problem still remains.
I have a service that gets created but is not autowired. There is no(!) manual initiation, neither in the project nor in tests (like in this question)
Both beans are found and created, says Tomcat output. At least the first service is not injected where it should be. I don't know about the second one.
Service (Interface):
public interface SchoolService {
public School getSchool(String id);
}
Service (Implementation):
@Service
@Transactional
public class SchoolServiceImpl implements SchoolService {
@Autowired
private SchoolDAO schoolDAO;
public School getSchool(String id) {
//database things
return school;
}
}
Where it gets "called"
public class SchoolMenu implements Serializable {
@Autowired
private SchoolService schoolService;
public SchoolMenu () {
//here schoolService is null
School school = schoolService.getSchool("id");
}
}
application-context.xml
<?xml version='1.0' encoding='UTF-8' ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<bean id="SchoolServiceImpl" class="content_management.School.service.SchoolServiceImpl"/>
<bean id="SchoolDAOImpl" class="content_management.School.dao.SchoolDAOImpl"/>
</beans>
Tomcat Output:
org.springframework.beans.factory.support.DefaultListableBeanFactory: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@57003970: defining beans [SchoolServiceImpl,SchoolDAOImpl]; root of factory hierarchy
org.springframework.beans.factory.support.DefaultListableBeanFactory: Creating shared instance of singleton bean 'SchoolServiceImpl'
org.springframework.beans.factory.support.DefaultListableBeanFactory: Creating instance of bean 'SchoolServiceImpl'
org.springframework.beans.factory.support.DefaultListableBeanFactory: Eagerly caching bean 'SchoolServiceImpl' to allow for resolving potential circular references
org.springframework.beans.factory.support.DefaultListableBeanFactory: Finished creating instance of bean 'SchoolServiceImpl'
org.springframework.beans.factory.support.DefaultListableBeanFactory: Creating shared instance of singleton bean 'SchoolDAOImpl'
org.springframework.beans.factory.support.DefaultListableBeanFactory: Creating instance of bean 'SchoolDAOImpl'
org.springframework.beans.factory.support.DefaultListableBeanFactory: Eagerly caching bean 'SchoolDAOImpl' to allow for resolving potential circular references
org.springframework.beans.factory.support.DefaultListableBeanFactory: Finished creating instance of bean 'SchoolDAOImpl'
Where is my error?
In order for @Autowired
to work, SchoolMenu
also has to be a Spring bean. If it is not, you can get schoolService
from application context. Something like this
ApplicationContext appContext = new ClassPathXmlApplicationContext("application-context.xml");
SchoolService schoolService = (SchoolService) appContext.getBean(SchoolService.class);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With