Search in sources :

Example 71 with ResourceLoader

use of org.springframework.core.io.ResourceLoader in project spring-framework by spring-projects.

the class InjectedConstructionResolverTests method resolveMixedArgsConstructorWithUserBeanReference.

@ParameterizedTest
@MethodSource("mixedArgsConstruction")
void resolveMixedArgsConstructorWithUserBeanReference(InjectedConstructionResolver resolver) {
    ResourceLoader resourceLoader = new DefaultResourceLoader();
    Environment environment = mock(Environment.class);
    DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
    beanFactory.registerResolvableDependency(ResourceLoader.class, resourceLoader);
    beanFactory.registerSingleton("environment", environment);
    beanFactory.registerSingleton("one", "1");
    beanFactory.registerSingleton("two", "2");
    AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(MixedArgsConstructor.class).setAutowireMode(RootBeanDefinition.AUTOWIRE_CONSTRUCTOR).getBeanDefinition();
    beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(1, new RuntimeBeanReference("two"));
    beanFactory.registerBeanDefinition("test", beanDefinition);
    InjectedElementAttributes attributes = resolver.resolve(beanFactory);
    assertThat(attributes.isResolved()).isTrue();
    assertThat((ResourceLoader) attributes.get(0)).isEqualTo(resourceLoader);
    assertThat((String) attributes.get(1)).isEqualTo("2");
    assertThat((Environment) attributes.get(2)).isEqualTo(environment);
}
Also used : DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader) ResourceLoader(org.springframework.core.io.ResourceLoader) AbstractBeanDefinition(org.springframework.beans.factory.support.AbstractBeanDefinition) DefaultListableBeanFactory(org.springframework.beans.factory.support.DefaultListableBeanFactory) Environment(org.springframework.core.env.Environment) RuntimeBeanReference(org.springframework.beans.factory.config.RuntimeBeanReference) DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 72 with ResourceLoader

use of org.springframework.core.io.ResourceLoader in project spring-framework by spring-projects.

the class InjectedConstructionResolverTests method resolveMixedArgsConstructorWithUserValue.

@ParameterizedTest
@MethodSource("mixedArgsConstruction")
void resolveMixedArgsConstructorWithUserValue(InjectedConstructionResolver resolver) {
    ResourceLoader resourceLoader = new DefaultResourceLoader();
    Environment environment = mock(Environment.class);
    DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
    beanFactory.registerResolvableDependency(ResourceLoader.class, resourceLoader);
    beanFactory.registerSingleton("environment", environment);
    AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(MixedArgsConstructor.class).setAutowireMode(RootBeanDefinition.AUTOWIRE_CONSTRUCTOR).getBeanDefinition();
    beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(1, "user-value");
    beanFactory.registerBeanDefinition("test", beanDefinition);
    InjectedElementAttributes attributes = resolver.resolve(beanFactory);
    assertThat(attributes.isResolved()).isTrue();
    assertThat((ResourceLoader) attributes.get(0)).isEqualTo(resourceLoader);
    assertThat((String) attributes.get(1)).isEqualTo("user-value");
    assertThat((Environment) attributes.get(2)).isEqualTo(environment);
}
Also used : DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader) ResourceLoader(org.springframework.core.io.ResourceLoader) AbstractBeanDefinition(org.springframework.beans.factory.support.AbstractBeanDefinition) DefaultListableBeanFactory(org.springframework.beans.factory.support.DefaultListableBeanFactory) Environment(org.springframework.core.env.Environment) DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 73 with ResourceLoader

use of org.springframework.core.io.ResourceLoader in project spring-framework by spring-projects.

the class InjectedConstructionResolverTests method resolveMultiArgsConstructor.

@ParameterizedTest
@MethodSource("multiArgsConstruction")
void resolveMultiArgsConstructor(InjectedConstructionResolver resolver) {
    ResourceLoader resourceLoader = new DefaultResourceLoader();
    Environment environment = mock(Environment.class);
    DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
    beanFactory.registerResolvableDependency(ResourceLoader.class, resourceLoader);
    beanFactory.registerSingleton("environment", environment);
    beanFactory.registerSingleton("one", "1");
    InjectedElementAttributes attributes = resolver.resolve(beanFactory);
    assertThat(attributes.isResolved()).isTrue();
    assertThat((ResourceLoader) attributes.get(0)).isEqualTo(resourceLoader);
    assertThat((Environment) attributes.get(1)).isEqualTo(environment);
    ObjectProvider<String> provider = attributes.get(2);
    assertThat(provider.getIfAvailable()).isEqualTo("1");
}
Also used : DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader) ResourceLoader(org.springframework.core.io.ResourceLoader) DefaultListableBeanFactory(org.springframework.beans.factory.support.DefaultListableBeanFactory) Environment(org.springframework.core.env.Environment) DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 74 with ResourceLoader

use of org.springframework.core.io.ResourceLoader in project spring-framework by spring-projects.

the class BeanDefinitionRegistrarTests method registerWithFactoryMethod.

@Test
void registerWithFactoryMethod() {
    ResourceLoader resourceLoader = new DefaultResourceLoader();
    DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
    beanFactory.registerResolvableDependency(ResourceLoader.class, resourceLoader);
    BeanDefinitionRegistrar.of("configuration", ConfigurationSample.class).instanceSupplier(ConfigurationSample::new).register(beanFactory);
    BeanDefinitionRegistrar.of("test", ConstructorSample.class).withFactoryMethod(ConfigurationSample.class, "sampleBean", ResourceLoader.class).instanceSupplier(instanceContext -> instanceContext.create(beanFactory, attributes -> beanFactory.getBean(ConfigurationSample.class).sampleBean(attributes.get(0)))).register(beanFactory);
    assertBeanFactory(beanFactory, () -> {
        assertThat(beanFactory.containsBean("configuration")).isTrue();
        assertThat(beanFactory.containsBean("test")).isTrue();
        assertThat(beanFactory.getBean(ConstructorSample.class).resourceLoader).isEqualTo(resourceLoader);
        RootBeanDefinition bd = (RootBeanDefinition) beanFactory.getBeanDefinition("test");
        assertThat(bd.getResolvedFactoryMethod()).isNotNull().isEqualTo(ReflectionUtils.findMethod(ConfigurationSample.class, "sampleBean", ResourceLoader.class));
    });
}
Also used : RootBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) Assertions.assertThatIllegalStateException(org.assertj.core.api.Assertions.assertThatIllegalStateException) InOrder(org.mockito.InOrder) ResourceLoader(org.springframework.core.io.ResourceLoader) FatalBeanException(org.springframework.beans.FatalBeanException) BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder) BeanInstanceContext(org.springframework.beans.factory.generator.config.BeanDefinitionRegistrar.BeanInstanceContext) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Autowired(org.springframework.beans.factory.annotation.Autowired) IOException(java.io.IOException) Field(java.lang.reflect.Field) Test(org.junit.jupiter.api.Test) Value(org.springframework.beans.factory.annotation.Value) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) BeanCreationException(org.springframework.beans.factory.BeanCreationException) FactoryBean(org.springframework.beans.factory.FactoryBean) DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader) Environment(org.springframework.core.env.Environment) ReflectionUtils(org.springframework.util.ReflectionUtils) Mockito.inOrder(org.mockito.Mockito.inOrder) DefaultListableBeanFactory(org.springframework.beans.factory.support.DefaultListableBeanFactory) ResolvableType(org.springframework.core.ResolvableType) Mockito.mock(org.mockito.Mockito.mock) ResourceLoader(org.springframework.core.io.ResourceLoader) DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader) DefaultListableBeanFactory(org.springframework.beans.factory.support.DefaultListableBeanFactory) RootBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition) DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader) Test(org.junit.jupiter.api.Test)

Example 75 with ResourceLoader

use of org.springframework.core.io.ResourceLoader in project spring-framework by spring-projects.

the class AbstractGenericWebContextLoader method configureWebResources.

/**
 * Configures web resources for the supplied web application context (WAC).
 * <h4>Implementation Details</h4>
 * <p>If the supplied WAC has no parent or its parent is not a WAC, the
 * supplied WAC will be configured as the Root WAC (see "<em>Root WAC
 * Configuration</em>" below).
 * <p>Otherwise the context hierarchy of the supplied WAC will be traversed
 * to find the top-most WAC (i.e., the root); and the {@link ServletContext}
 * of the Root WAC will be set as the {@code ServletContext} for the supplied
 * WAC.
 * <h4>Root WAC Configuration</h4>
 * <ul>
 * <li>The resource base path is retrieved from the supplied
 * {@code WebMergedContextConfiguration}.</li>
 * <li>A {@link ResourceLoader} is instantiated for the {@link MockServletContext}:
 * if the resource base path is prefixed with "{@code classpath:}", a
 * {@link DefaultResourceLoader} will be used; otherwise, a
 * {@link FileSystemResourceLoader} will be used.</li>
 * <li>A {@code MockServletContext} will be created using the resource base
 * path and resource loader.</li>
 * <li>The supplied {@link GenericWebApplicationContext} is then stored in
 * the {@code MockServletContext} under the
 * {@link WebApplicationContext#ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE} key.</li>
 * <li>Finally, the {@code MockServletContext} is set in the
 * {@code WebApplicationContext}.</li>
 * </ul>
 * @param context the web application context for which to configure the web resources
 * @param webMergedConfig the merged context configuration to use to load the web application context
 */
protected void configureWebResources(GenericWebApplicationContext context, WebMergedContextConfiguration webMergedConfig) {
    ApplicationContext parent = context.getParent();
    // set the current context as the root WebApplicationContext:
    if (!(parent instanceof WebApplicationContext)) {
        String resourceBasePath = webMergedConfig.getResourceBasePath();
        ResourceLoader resourceLoader = (resourceBasePath.startsWith(ResourceLoader.CLASSPATH_URL_PREFIX) ? new DefaultResourceLoader() : new FileSystemResourceLoader());
        ServletContext servletContext = new MockServletContext(resourceBasePath, resourceLoader);
        servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);
        context.setServletContext(servletContext);
    } else {
        ServletContext servletContext = null;
        // Find the root WebApplicationContext
        while (parent != null) {
            if (parent instanceof WebApplicationContext && !(parent.getParent() instanceof WebApplicationContext)) {
                servletContext = ((WebApplicationContext) parent).getServletContext();
                break;
            }
            parent = parent.getParent();
        }
        Assert.state(servletContext != null, "Failed to find root WebApplicationContext in the context hierarchy");
        context.setServletContext(servletContext);
    }
}
Also used : ResourceLoader(org.springframework.core.io.ResourceLoader) FileSystemResourceLoader(org.springframework.core.io.FileSystemResourceLoader) DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader) WebApplicationContext(org.springframework.web.context.WebApplicationContext) ApplicationContext(org.springframework.context.ApplicationContext) ConfigurableApplicationContext(org.springframework.context.ConfigurableApplicationContext) GenericWebApplicationContext(org.springframework.web.context.support.GenericWebApplicationContext) FileSystemResourceLoader(org.springframework.core.io.FileSystemResourceLoader) ServletContext(jakarta.servlet.ServletContext) MockServletContext(org.springframework.mock.web.MockServletContext) MockServletContext(org.springframework.mock.web.MockServletContext) WebApplicationContext(org.springframework.web.context.WebApplicationContext) GenericWebApplicationContext(org.springframework.web.context.support.GenericWebApplicationContext) DefaultResourceLoader(org.springframework.core.io.DefaultResourceLoader)

Aggregations

ResourceLoader (org.springframework.core.io.ResourceLoader)90 Resource (org.springframework.core.io.Resource)51 Test (org.junit.Test)35 ClassRelativeResourceLoader (org.springframework.core.io.ClassRelativeResourceLoader)34 File (java.io.File)33 DefaultResourceLoader (org.springframework.core.io.DefaultResourceLoader)26 Test (org.junit.jupiter.api.Test)15 IOException (java.io.IOException)9 Environment (org.springframework.core.env.Environment)9 ByteArrayResource (org.springframework.core.io.ByteArrayResource)7 DefaultListableBeanFactory (org.springframework.beans.factory.support.DefaultListableBeanFactory)6 FileSystemResource (org.springframework.core.io.FileSystemResource)6 HashMap (java.util.HashMap)5 Configuration (freemarker.template.Configuration)4 Template (freemarker.template.Template)4 InputStream (java.io.InputStream)4 GenericApplicationContext (org.springframework.context.support.GenericApplicationContext)4 InputStreamReader (java.io.InputStreamReader)3 Properties (java.util.Properties)3 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)3