简体   繁体   English

使用Java配置在N-Tier Web应用程序中的Spring上下文

[英]Spring context in N-Tier web application with Java config

We are building a Web project which uses the below Java stack. 我们正在构建一个使用以下Java堆栈的Web项目。 Its uses n-tier with data/business/service/web/client layers. 它在数据/业务/服务/网络/客户端层使用n层。

Data layer - Java, JPA, Spring-data-JPA
Business layer - Java
Service layer - Java, Apache CXF (REST/SOAP) Webservices

Client layer - AngularJS, Bootstrap

I am trying to figure out how to pass the spring context between these n-tiers. 我试图弄清楚如何在这些n层之间传递spring上下文。 I am also trying to use Java configurations instead of XML, so quite confused. 我也在尝试使用Java配置而不是XML,因此非常困惑。

In my earlier projects we create the spring context in the web layer with XML configuration. 在我之前的项目中,我们使用XML配置在Web层中创建spring上下文。

I tried to follow this tutorial http://source.lishman.com/project/689#card/5509/file/19177 我试图按照本教程http://source.lishman.com/project/689#card/5509/file/19177

I am able to have a working data layer as standalone. 我能够拥有一个独立的工作数据层。 But not sure how to inject the Repositories in the Business layer ?? 但不确定如何在业务层中注入存储库?

The below trial works, but only after duplicating the below configuration in Business layer too which I have already defined/configured in the data layer 以下试用版有效,但仅在我已经在数据层中定义/配置过的业务层中复制了以下配置之后

@Import(value = { DataSourceConfig.class, JpaConfig.class, RepositoryConfig.class })

Business layer 业务层

Configuration 组态

@Configuration
@Import(value = { DataSourceConfig.class, JpaConfig.class, RepositoryConfig.class })
public class ServiceConfig {

    @Autowired
    AirlineBusiness airlineBusiness;

    @Bean
    public AirlineBusiness getAirlineBusiness() {
        return new AirlineBusinessImpl();
    }
}

Business interface 业务界面

@Service
public interface AirlineBusiness extends Serializable {

    public List<Airline> findAll();
}

Business implementation 业务实施

    @Service
    public class AirlineBusinessImpl implements AirlineBusiness {

    @Autowired
    private AirlineRepository airlineRepository;

    @Override
    public List<Airline> findAll() {
        return airlineRepository.findAll();
    }

}

Simply create a separate configuration class for each layer. 只需为每个层创建一个单独的配置类。 In each configuration class import the config class from layer below (it works transitively): 在每个配置类中,从下面的层导入config类(可传递):

@Configuration
@Import(value = { DataSourceConfig.class, JpaConfig.class, RepositoryConfig.class })
public class DataConfig {

}

@Configuration
@Import(value = { DataConfig.class })
public class ServiceConfig {
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM