2012-04-06 86 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/但我给你作为答案无论如何。 – 2012-04-06 20:04:32

2

如果我的理解正确,你的意思是 - ServiceLocatorFactoryBean 与它,你可以称之为像MyService getService(String id)) somthing。

另一种方式,将实现某种控制器服务,将所有其他服务自动装配到它,并将持有从他们的字符串id到实际实例的映射。

在我看来,第二个选择更好,因为它更易于管理和清晰。

希望能帮助你。

+0

感谢,如果能有一个更多的答案,我也会投你的。 – 2012-04-06 20:05:52

1

你可以做到。您需要创建应用程序上下文,然后开始工作。

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

谢谢,如果它可以有更多的答案,我也会投票给你。 – 2012-04-06 20:05:37

相关问题