nyx*_*yxz 5 java configuration spring servlet-3.0
上下文:
我从基于XML的Spring配置切换到了基于Java的配置.我的应用程序有一个基于JSP的Web层,Spring MVC,Spring Security和Hibernate作为持久性提供程序.
我设法在不同的配置类中分离整个XML配置:
WebConfig
- 用于Spring MVC配置;
PersistenceConfig
- 正如名称所述 - 用于JPA配置;
ServiceConfig
- 仅适用于@Service和@Component注释类;
SecurityConfig
- 用于Spring安全配置.
对于应用程序初始化,我有SecurityInitializer
和WebAppInitializer
类.
这是一些代码:
WebConfig
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.demo.app.web"})
public class WebConfig extends WebMvcConfigurerAdapter { /* Bean initialization */ }
Run Code Online (Sandbox Code Playgroud)
PersistenceConfig
@Configuration
@ComponentScan(basePackages = {"com.demo.app.dao"})
@EnableTransactionManagement(mode = AdviceMode.PROXY, proxyTargetClass = true)
public class PersistenceConfig { /* Bean initialization */ }
Run Code Online (Sandbox Code Playgroud)
ServiceConfig
@Configuration
@ComponentScan(basePackages = {"com.demo.app.service", "com.demo.app.component"})
public class ServiceConfig { /* Bean initialization */ }
Run Code Online (Sandbox Code Playgroud)
SecurityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter { /* Bean initialization */ }
Run Code Online (Sandbox Code Playgroud)
SecurityInitializer
@Order(1)
public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {
}
Run Code Online (Sandbox Code Playgroud)
WebAppInitializer
@Order(2)
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] {SecurityConfig.class, PersistenceConfig.class,
ServiceConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] {WebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
}
Run Code Online (Sandbox Code Playgroud)
并且必须测试我拥有的所有东西:
TestContext
- 我认为它构建基本上下文的抽象类;
TestWebContext
- 扩展TestContext
并添加WebCOnfig
上下文.所有控制器测试都扩展了它;
DaoTest
- 扩展TestContext
和添加事务管理.所有DAO测试都扩展了它;
的TestContext
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {PersistenceConfig.class, ServiceConfig.class, SecurityConfig.class})
public abstract class TestContext {
}
Run Code Online (Sandbox Code Playgroud)
TestWebContext
@ContextConfiguration(classes = {WebConfig.class})
@WebAppConfiguration
public abstract class TestWebContext extends TestContext {
}
Run Code Online (Sandbox Code Playgroud)
DaoTest
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
public abstract class DaoTest extends TestContext {
}
Run Code Online (Sandbox Code Playgroud)
问题:
WebConfig.class
在getServletConfigClasses()
或getRootConfigClasses()
或两者兼而有之?有什么不同?getRootConfigClasses()
和getServletConfigClasses()
方法中的类的顺序是否重要?我已经看到某个地方的订单对初始化者和人们都很重要@Order
,但这些Config
课程呢? TestWebContext
类我知道只是添加@ContextConfiguration(classes = {WebConfig.class})
覆盖@ContextConfiguration
基类但是如何实现上下文扩展? CoreConfig
(我有一个).然后从其中加载Spring应用程序上下文并将其添加到以下类中getRootConfigClasses()
:CoreConfig
@Configuration
@EnableScheduling
@ImportResource("classpath:applicationContext.xml")
public class CoreConfig { // No duplicate Beans load }
Run Code Online (Sandbox Code Playgroud)
首先加载哪些bean?applicationContext.xml中的那些或Config类中的那些?
来自练习的任何其他技巧对您有关Java配置的帮助也非常感谢!
关于配置文件的使用,我实际上使用了与您类似的方法。您可能会发现有用的更改可能是仅从 getRootConfigClasses() 加载 RootConfig.class,并且 RootConfig 可以导入 SecurityConfig.class、PersistenceConfig.class 和 ServiceConfig.class 以及它可能具有的任何其他功能。例如,在我的例子中,它还使用 @PropertySource("classpath:application.properties") 注释加载 application.properties 文件并包含 PropertySourcesPlaceholderConfigurer bean
归档时间: |
|
查看次数: |
2598 次 |
最近记录: |