我有我的應用程序配置建立編程一個bean,而我輸入這樣的豆:春天 - 如何引用編程
@Configuration
@ImportResource(value= { "classpath:myBean.xml"})
public class AppConfig extends WebMvcConfigurerAdapter
{
而在myBean.xml
我有這樣的:
<bean id="myBeanId" class="my.domain.myBeanClass">
<property name="sessionFactory" ref="my_session_factory" />
<property name="someOtherProperty"...
</bean>
這工作正常,sessionFactory
注入myBeanClass
。
但是,如果我嘗試以編程方式實例化同一個bean,那麼我會得到「沒有找到依賴關係...的[org.hibernate.SessionFactory]類型的匹配bean」錯誤。
@Configuration
@Import(BeanConfig.class)
public class AppConfig extends WebMvcConfigurerAdapter
{
豆配置類:
@Configuration
public class BeanConfig
{
@Autowired
private SessionFactory sessionFactory;
@Bean(name="myBeanId")
public MyBeanClass createMyBeanClass()
{
MyBeanClass mbc = new MyBeanClass();
mbc.setSessionFactory(sessionFactory);
....
return mbc;
編輯:肯定是創建了一個SessionFactory豆,如果我添加所需= false將@Autowired,一旦一切都被載入然後手動注入SessionFactory的。它工作正常。
編輯2: 我沒有web.xml,我使用的是servlet 3,所以以編程方式聲明瞭所有內容。這是我的web.xml相當於
@Configuration
public class WalletInitialiser implements WebApplicationInitializer
{
@Override
public void onStartup(ServletContext aServletContext) throws ServletException
{
AnnotationConfigWebApplicationContext mvcContext
= new AnnotationConfigWebApplicationContext();
mvcContext.register(AppConfig.class);
mvcContext.scan("config.packages", "class.packages");
aServletContext.addListener(new ContextLoaderListener(mvcContext));
//add security filters, dispatcher to servlet, logback
我已經在其他類配置我的SessionFactory,HibernateConfig在配置包,它正在從
mvcContext.scan("config.packages", "class.packages");
摘自這個類拿起是:
@Configuration
@EnableTransactionManagement
public class HibernateConfig
{
@Bean(name="my_session_factory")
public LocalSessionFactoryBean baseSessionFactory()
{
LocalSessionFactoryBean lsfb= new LocalSessionFactoryBean();
lsfb.setPackagesToScan("class.packages");
lsfb.setAnnotatedPackages("class.packages");
//add hibernate props for datasource
return lsfb;
}
}
你是否在上下文(myBean.xml)中打開了基於註解的配置? –
你可以請你也展示你如何用你的容器(這個AppConfig的web.xml條目)配置了AppConfig,你也可能有另外一個配置你定義SessionFactory的權利,你能不能顯示配置也是 –
這很奇怪,您使用的是annoation驅動的配置,但是然後從xml文件導入一個bean。你也可以放棄基於java的conifg註釋,因爲它依賴於xml。這是不必要的混淆。 – NimChimpsky