1

次のような Service クラスがあります。

@Service
public class CompanyServiceImpl implements CompanyService {

    @Autowired
    private CompanyDAO companyDAO;

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

}

通常、次の方法で Spring から CompanyService のインスタンスを取得できます。

@Autowired
CompanyService companyService;

しかし、場合によっては、次のように @Autowired なしで CompanyService のインストールを作成/取得したい:

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

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

4

3 に答える 3

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);
于 2012-04-06T11:55:50.127 に答える
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);
于 2012-04-06T11:35:08.107 に答える