标签: spring-annotations

Spring中有没有办法自动装配给定类型的所有依赖项?

我正在@Configurable(autowire=Autowire.BY_TYPE)为给定的类使用基于注释的连接(即),并且我想将给定类型的所有bean作为列表连接到它中:

应用背景:

<beans>
    <bean class="com.my.class.FirstConfigurer"/>
    <bean class="com.my.class.SecondConfigurer"/>
</beans>
Run Code Online (Sandbox Code Playgroud)

自动加入的课程:

@Configurable(autowire=Autowire.BY_TYPE) public class Target {
    ...
    public void setConfigurers(List<Configurer> configurers) { ... }
}
Run Code Online (Sandbox Code Playgroud)

所有依赖项都实现一个名为的公共接口 Configurer

有没有办法让这个工作让一个类型的所有依赖关系在一个集合中连接在一起并在必要时注入,或者我应该<list>在XML中定义一个什么?

java spring spring-annotations

8
推荐指数
1
解决办法
6329
查看次数

自动装配在Spring 3.1.2,JUnit 4.10.0中不起作用

使用Spring 3.1.2,JUnit 4.10.0,这两个版本都很新.我遇到的问题是我无法使基于注释的自动装配工作.

下面是两个样本,一个没有使用注释,这是正常工作.而第二个使用注释,这是行不通的,我找不到原因.我几乎遵循了spring-mvc-test的样本.

工作:

package com.company.web.api;
// imports

public class ApiTests {   

    @Test
    public void testApiGetUserById() throws Exception {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("/com/company/web/api/ApiTests-context.xml");
        UserManagementService userManagementService = (UserManagementService) ctx.getBean("userManagementService");
        ApiUserManagementController apiUserManagementController = new ApiUserManagementController(userManagementService);
        MockMvc mockMvc = standaloneSetup(apiUserManagementController).build();

        // The actual test     
        mockMvc.perform(get("/api/user/0").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
    }
}
Run Code Online (Sandbox Code Playgroud)

失败,因为userManagementService为空,没有获得自动连接:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration       // should default to ApiTests-context.xml in same package
public class ApiTests {

    @Autowired
    UserManagementService userManagementService;

    private MockMvc mockMvc;

    @Before
    public void setup(){
        // SetUp never gets called?! …
Run Code Online (Sandbox Code Playgroud)

junit spring junit4 spring-annotations spring-test-mvc

8
推荐指数
1
解决办法
1万
查看次数

使用Spring @Configuration批注注入bean列表

我有一个Spring bean,在Spring Bean中我依赖于其他bean的列表.我的问题是:如何将bean的通用列表注入该bean的依赖项?

例如,一些代码:

public interface Color { }

public class Red implements Color { }

public class Blue implements Color { }
Run Code Online (Sandbox Code Playgroud)

我的豆子:

public class Painter {
  private List<Color> colors;

  @Resource
  public void setColors(List<Color> colors) {
      this.colors = colors;
  }
}

@Configuration
public class MyConfiguration {

  @Bean
  public Red red() {
    return new Red();
  }

  @Bean
  public Blue blue() {
    return new Blue();
  }

  @Bean
  public Painter painter() {
    return new Painter();
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是; 如何获取Painter中的颜色列表?另外,在旁注:我应该让@Configuration返回接口类型,还是类?

谢谢您的帮助!

java spring spring-annotations

8
推荐指数
1
解决办法
2万
查看次数

Spring MVC - 缺少字段的HTTP状态代码400(错误请求),定义为不需要

我有这个控制器方法的Spring MVC应用程序.

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addNumber(@RequestParam(value="number", required=false) Long number) {
   ...
   return "redirect:/showAll/";
}
Run Code Online (Sandbox Code Playgroud)

在我的JSP中,我有一个标准的HTML表单,它将一个名为"number"的值发布到上面的控制器方法中.但是,如果我省略了值(不在文本字段中输入任何内容)并将数据POST到控制器,则在调用控制器方法之前,我的浏览器显示

HTTP Status 400 - Required Long parameter 'number' is not present
Run Code Online (Sandbox Code Playgroud)

尽管控制器方法注解明确规定-parameter为"数字" 必需的.

有没有人对可能发生的事情略有了解?

谢谢.

PS:抛出的异常如下:

org.springframework.web.bind.MissingServletRequestParameterException: Required Long parameter 'number' is not present
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个Spring 3.2.3.RELEASE错误(见这里).使用版本3.1.4.RELEASE我不再有这个问题了.

spring spring-mvc spring-annotations

8
推荐指数
1
解决办法
4万
查看次数

带嵌入式德比的Spring:hibernate dialect弃用

我有一个配置了spring boot和config注释的spring应用程序.

JPA配置是:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories
public class JpaConfiguration {

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.DERBY).build();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource,
            JpaVendorAdapter jpaVendorAdapter) {
        LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
        lef.setDataSource(dataSource);
        lef.setJpaVendorAdapter(jpaVendorAdapter);
        lef.setPackagesToScan( /* "..." */ );
        return lef;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setShowSql(true);
        hibernateJpaVendorAdapter.setGenerateDdl(true);
        hibernateJpaVendorAdapter.setDatabase(Database.DERBY);
        return hibernateJpaVendorAdapter;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new JpaTransactionManager();
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直在日志中:

[...]
HHH000400: Using dialect: org.hibernate.dialect.DerbyDialect
HHH000430: The DerbyDialect dialect has been …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa derby spring-annotations

8
推荐指数
1
解决办法
3408
查看次数

在Spring中使用通配符通过注释将文件作为资源列表注入

我有一个用作春豆的课程.bean的定义applicationContext.xml如下:

<bean id="myClass" class="com.example.MyClass">
        <property name="cssFiles" value="classpath*:../../cssDir/*.css"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

而且MyClass样子:

...
import org.springframework.core.io.Resource;
...
public class MyClass {
    private List<Resource> cssFiles;

    // methods etc.
}
Run Code Online (Sandbox Code Playgroud)

所以Spring用"classpath*:../../ cssDir /"下的所有扩展名为.css的文件填充cssFiles字段.

现在我正在努力转向完整的注释配置,但我无法用注释做同样的事情.这不起作用:

...
import org.springframework.core.io.Resource;
...
@Component
public class MyClass {
    @Value("classpath*:../../cssDir/*.css")
    private List<Resource> cssFiles;

    // methods etc.
}
Run Code Online (Sandbox Code Playgroud)

你有什么主意吗?

java spring dependency-injection spring-annotations spring-io

8
推荐指数
1
解决办法
5295
查看次数

@PropertySource用绝对路径来避免"java.io.FileNotFoundException:无法打开ServletContext资源"

我的应用程序从环境变量获取属性文件的位置,它可能不在WEB-INF文件夹中.我找不到文件,但这个文件肯定存在.我不想使用classpath:前缀,我不希望它相对于应用程序根目录.

@PropertySource("${propfile}")
public class ... {
Run Code Online (Sandbox Code Playgroud)

spring spring-annotations

8
推荐指数
1
解决办法
3346
查看次数

Spring启动组件扫描包括单个类

我使用spring组件扫描来自动检测bean:

@ComponentScan({"com.org.x, com.org.y"})
Run Code Online (Sandbox Code Playgroud)

问题是我想要com.org.x扫描所有类,但我想要一个单独的类com.org.y.SomeService.class,单独扫描com.org.y

我怎样才能做到这一点?

除了使用上下文扫描之外,我如何创建这个bean并注入应用程序上下文?

java spring spring-annotations spring-boot component-scan

7
推荐指数
2
解决办法
5784
查看次数

如何在 SpEL 中按类型引用 bean?

以下是一个最小的示例,显示了我的问题。

Main.kt:

package com.mycompany.configurationpropertiestest

import org.slf4j.LoggerFactory
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.boot.context.properties.ConstructorBinding
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.runApplication
import org.springframework.scheduling.annotation.EnableScheduling
import org.springframework.scheduling.annotation.Scheduled
import org.springframework.stereotype.Service


@SpringBootApplication
@EnableScheduling
@EnableConfigurationProperties(FooServiceConfig::class)
class Application

fun main(args: Array<String>) {
    runApplication<Application>(*args)
}


@ConstructorBinding
@ConfigurationProperties("configurationpropertiestest.foo")
data class FooServiceConfig(
    val interval: Int = 1000,
    val message: String = "hi"
)


@Service
class FooService(
    private val myConfig: FooServiceConfig
) {
    private val log = LoggerFactory.getLogger(this.javaClass)
    //@Scheduled(fixedDelayString = "#{@FooServiceConfig.interval}")
    //@Scheduled(fixedDelayString = "#{@myConfig.interval}")
    @Scheduled(fixedDelayString = "\${configurationpropertiestest.foo.interval}")
    fun talk() {
        log.info(myConfig.message)
    }
}
Run Code Online (Sandbox Code Playgroud)

( …

spring spring-annotations spring-el kotlin spring-boot

7
推荐指数
1
解决办法
1万
查看次数

Spring Data JPA 不可变实体

将 Spring Data JPA 与 Hibernate 一起使用,这两个注释可以互换吗?

  1. org.hibernate.annotations.Immutable
  2. org.springframework.data.annotation.Immutable

更具体地说,Spring 注释是否可以替换 Hibernate 注释,以避免实体中任何直接的 Hibernate 依赖?如果不是,是否有任何理由在同一实体上使用两个注释?

hibernate immutability spring-annotations spring-data spring-data-jpa

7
推荐指数
1
解决办法
2025
查看次数