自動配線注釈に問題があります。私のアプリは次のようになります。
これがコントローラーです:
@Controller
public class MyController {
@Autowired
@Qualifier("someService")
private SomeService someService;
....
}
これはサービスレイヤーです。
public interface SomeService {
...
}
@Service
public class SomeServiceImpl implements SomeService{
@Autowired
@Qualifier("myDAO")
private MyDAO myDAO;
....
}
そしてDAOレイヤー:
public interface MyDAO{
....
}
@Repository
public class JDBCDAOImpl implements MyDAO {
@Autowired
@Qualifier("dataSource")
private DataSource dataSource;
....
}
これはapp-service.xmlファイルです。
....
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/jdbc.properties" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}"
p:username="${jdbc.username}"
p:password="${jdbc.password}"/>
<bean id="SomeService" class="com.service.SomeServiceImpl" />
<bean id="myDAO" class="com.db.JDBCDAOImpl" />
だから...私がウェブアプリを起動しているとき、MyController Autowiresは正しく(someServiceImplクラスオブジェクトによって正しく注入されたsomeServiceフィールド)、しかしsomeServiceのmyDAOフィールドはnull値を持っています(正しく注入されていません)。
問題を見つけるのを手伝ってもらえますか?
PS興味深いですが、「Bean ID」をmyDAOから別のID(myDAO2など)に変更すると、Bean myDAOが存在しないため、システムから注入が実行できなかったというエラーが表示されます。それで、春は注射をします、しかしそれはどこにありますか?そして、なぜそれが正しく機能しないのですか?