2012-04-06 6 views
1

私はこのようなサービスクラスがあります。Springでトランザクションを持つオブジェクトを取得するには?

@Service 
public class CompanyServiceImpl implements CompanyService { 

    @Autowired 
    private CompanyDAO companyDAO; 

    @Transactional 
    public void addOrUpdateCompany(Company company) { 
     companyDAO.addOrUpdateCompany(company); 
    } 

} 

通常は、私がで春からCompanyServiceのインスタンスを持つことができます。

@Autowired 
CompanyService companyService; 

しかし、いくつかのケースでは、私が作成/取得したいです@AutowiredのないCompanyServiceのインスタント:

CompanyService companyService = XXX.getxxx("CompanyService"); 

私はこれを行う方法はありますか?

答えて

2

他の方法は、

 

@Component 
public class ContextHolder implements ApplicationContextAware { 
    private static ApplicationContext CONTEXT; 

    public void setApplicationContext(ApplicationContext applicationContext) { 
     CONTEXT = applicationContext; 
    } 

    public static ApplicationContext getContext() { 
     return CONTEXT; 
    } 
} 
 
です

そして、それはもう一つの答えを持っていることができれば、その後

CompanyService service = ContextHolder.getContext().getBean(CompanyService.class); 
+0

これはもっと明確ですhttp://jerlinworld.wordpress.com/2009/07/20/making-your-spring-application-context-aware/しかし、私はあなたを答えとしてとにかく与えます。 –

2

私が正しく理解していると、ServiceLocatorFactoryBean のようなものです。MyService getService(String id))のようなものがあります。

もう1つの方法は、他のすべてのサービスを自動化させる何らかのコントローラサービスを実装し、文字列idから実際のインスタンスにマップを保持することです。

私の意見では、2番目の選択肢はより管理しやすく明確です。

希望はあなたを助けます。

+0

おかげで、私はまた、あなたを投票します。 –

1

できます。あなたはアプリケーションのコンテキストをinstancateする必要があり、あなたがされて取得します。

Resource res = new FileSystemResource("beans.xml"); 
XmlBeanFactory factory = new XmlBeanFactory(res); 

または

ClassPathResource res = new ClassPathResource("beans.xml"); 
XmlBeanFactory factory = new XmlBeanFactory(res); 

または

ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
    new String[] {"applicationContext.xml", "applicationContext-part2.xml"}); 
// of course, an ApplicationContext is just a BeanFactory 
BeanFactory factory = (BeanFactory) appContext; 

と使用:

MyObject my = (MyObject)factory.getBean(NAME_OF_YOUR_BEAN); 
+0

お返事ありがとうございました。私もあなたに投票します。 –

関連する問題