标签: autowired

Spring bean注入一个main方法类

我有一个带有spring 3.0的Web应用程序.我需要使用来自cron的main方法运行一个类,该cron使用appcontext xml中定义的bean(使用组件扫描annocations).我的主类在同一个src目录中.如何从Web上下文中将bean注入main方法.我试着用它来做

ApplicationContext context = new ClassPathXmlApplicationContext("appservlet.xml");
Run Code Online (Sandbox Code Playgroud)

我尝试使用AutoWired,它返回一个空bean.所以我使用了应用程序ctx,这是在运行main方法时创建一个新的上下文(如预期的那样).但是我可以使用容器中的现有bean吗?

 @Autowired
 static DAO dao;

    public static void main(String[] args) {
                 ApplicationContext context = new ClassPathXmlApplicationContext("xman-         servlet.xml");
    TableClient client = context.getBean(TableClient.class);
    client.start(context);

}
Run Code Online (Sandbox Code Playgroud)

spring program-entry-point dependency-injection inversion-of-control autowired

12
推荐指数
2
解决办法
4万
查看次数

Spring @Autowired混乱(容器或会话)

在我的应用程序中,我使用自动连接User到我的服务的bean,MyService并将其用作登录用户信息的原则(因此用户不是从xml作为静态bean而是从登录用户动态生成)如果有登录的十个用户我将有十个该@AutoWired User领域的候选人.(对吗?)我可以在Spring容器中找到其中任何一个cos AutoWired,而不是会话.

告诉我,如果我错了.以及如果可能的话如何实际解决它.但是如果我的AutoWired字段被注释了怎么办呢@Scope ("Session")

像这样 :

@Component("user")
@Scope("session")
public class User 
{
String userid;
String name;
//getter setters etc
}
Run Code Online (Sandbox Code Playgroud)
@Component
public class MyService
{
    @Autowired
    private User user;

}
Run Code Online (Sandbox Code Playgroud)

当我调用MyServiceComponent 时,是否可以获取其他用户的User bean .Cos MyService只是@Component即使它User@Scope(session).

基本上,(如果我的假设是错的)我认为当你@Autowire是一个字段时,它会将容器视为整体并且容器不会被分成每个会话的子容器.

spring annotations dependency-injection autowired

12
推荐指数
2
解决办法
9885
查看次数

如何自动装配Spring TaskExecutor创建的线程?

根据Spring的文档,使用TaskExecutor的方法如下:

import org.springframework.core.task.TaskExecutor;

public class TaskExecutorExample {

  private class MessagePrinterTask implements Runnable {

    private String message;

    public MessagePrinterTask(String message) {
      this.message = message;
    }

    public void run() {
      System.out.println(message);
    }

  }

  private TaskExecutor taskExecutor;

  public TaskExecutorExample(TaskExecutor taskExecutor) {
    this.taskExecutor = taskExecutor;
  }

  public void printMessages() {
    for(int i = 0; i < 25; i++) {
      taskExecutor.execute(new MessagePrinterTask("Message" + i));
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果MessagePrinterTask具有自动连接的依赖关系,它们将不会被Spring配置,因为我们在Spring的上下文之外实例化我们的bean(至少我理解它是这样),即使Spring将提供实际的线程创建.如果MessagePrinterTask具有自动连接的依赖关系,我们如何让Spring识别它们?我尝试了以下修改示例无效(是的,正确启用了自动装配):

import org.springframework.core.task.TaskExecutor;

public class TaskExecutorExample {

  @Component
  private class MessagePrinterTask implements Runnable { …
Run Code Online (Sandbox Code Playgroud)

java spring multithreading autowired

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

在Cobertura仪表课的情况下,Spring @Autowired失败了

Cobertura仪器在特定情况下打破弹簧自动装配.有谁知道如何解决这个问题?

脚本

  • 我使用cobertura-maven-plugin版本2.5.1运行MVN 3.0.4.
  • mvn测试没有问题
  • mvn编译,包等也运行没有问题.
  • mvn cobertura:cobertura也没有遇到任何问题,直到添加了2个新功能,这些功能引入了许多新类,包括两个新的com.mycompany.executor执行器类.(示例:除了现有的MyExecutor之外还添加了MyHappyExecutor和MySadExecutor)
  • 从cobertura仪器过程中排除MyExecutor似乎可以修复自动装配
  • 检查弹簧自动装配输出确认正确的bean正在自动装配.

失败点

尝试在myService中自动装配myExecutor的已检测版本时,自动装配失败.在添加MyHappyExecutor和MySadExecutor之前,此工作正常.MyHappyExecutor和MySadExecutor是自动装配的,并且仅在MyExecutor中使用.

我已经附加了下面的异常输出.请注意,类和包名称已被编辑.

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myService': Injection of autowired dependencies failed; 
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.mycompany.executor.MyExecutor com.mycompany.service.impl.MyServiceImpl.myExecutor; 
nested exception is java.lang.IllegalArgumentException: Can not set com.mycompany.executor.MyExecutor field com.mycompany.service.impl.MyServiceImpl.myExecutor to $Proxy20
Run Code Online (Sandbox Code Playgroud)

结论

Cobertura仪表过程中的某些东西会影响Springs的自动装配.

更新1

强制CGLIB类代理将错误类型更改为"java.lang.NoClassDefFoundError"错误.这会影响标准测试目标以及Cobertura目标.

<aop:config proxy-target-class="true"/>
Run Code Online (Sandbox Code Playgroud)

更新2

以下是有关3个类的弹簧启动过程的输出.

2012-11-01 16:21:51 INFO  [main] Overriding bean definition for bean 'myExecutor': replacing [Generic bean: class [com.mycompany.executor.MyExecutor]; scope=; abstract=false; lazyInit=false; autowireMode=1; dependencyCheck=0; autowireCandidate=true; …
Run Code Online (Sandbox Code Playgroud)

spring instrumentation cobertura autowired maven

12
推荐指数
1
解决办法
2715
查看次数

如何在Validator类中@Autowire对象?

是否可以在Validation类中自动装配对象?对于应该是Autowired的对象,我一直都为null ...

spring autowired

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

将服务自动装配到验证器中

这个例子有点人为; 我简化了它以删除无关的细节,并专注于我遇到的问题.我有一个看起来像这样的验证器:

@Component
public class UniqueUsernameValidator implements ConstraintValidator<UniqueUsername, String> {

    @Autowired
    UsernameService usernameService;

    @Override
    public void initialize(UniqueUsername uniqueUsername) {
    }

    @Override
    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        return !usernameService.exists(s);
    }   
}
Run Code Online (Sandbox Code Playgroud)

我从我的控制器调用验证器,如下所示:

@RequestMapping
public void checkUsername(Model model, User user) {
    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();

    Set<ConstraintViolation<User>> constraintViolations = validator.validateProperty(user, "username");
    model.addAttribute("error", constraintViolations.size() > 0);
}
Run Code Online (Sandbox Code Playgroud)

但是,我一直有NullPointerException例外.我在验证器添加一个断点,并看到usernameServicenull.为什么不进行自动装配?最初我认为这是因为我没有注释验证器@Component,但即使在注释它之后我仍然有同样的问题.该UsernameService班已经标注了@Service,我可以验证它的构造函数获取调用.

我是Spring的新手,所以我甚至不确定将服务连接到验证器是否可以.我究竟做错了什么?

validation spring autowired hibernate-validator spring-3

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

@Autowire不在Spring安全自定义身份验证提供程序中工作

我们有Spring MVC应用程序.我们正在尝试将Spring安全性集成到其中.

我们编写了自定义身份验证提供程序,它将执行身份验证工作.

以下是我的自定义身份验证提供程序的代码.

    public class CustomAuthenticationProvider extends DaoAuthenticationProvider {

    @Autowired
    private AuthenticationService authenticationService;

    @Override
    public Authentication authenticate(Authentication authentication) {

        CustomAuthenticationToken auth = (CustomAuthenticationToken) authentication;

        String username = String.valueOf(auth.getPrincipal());
        String password = String.valueOf(auth.getCredentials());

        try {

            Users user = new User();
            user.setUsername(username);
            user.setPassword(PasswordUtil.encrypt(password));

            user = authenticationService.validateLogin(user);

            return auth;
        } catch (Exception e) {
            throw new BadCredentialsException("Username/Password does not match for " + username);
        }
    }

    @Override
    public boolean supports(Class<? extends Object> authentication) {
        return (CustomAuthenticationToken.class.isAssignableFrom(authentication));

    }
}
Run Code Online (Sandbox Code Playgroud)

这里我在以下行获取NullpointerException

user = authenticationService.validateLogin(user); …
Run Code Online (Sandbox Code Playgroud)

spring-mvc spring-security autowired

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

2个具有相同名称但位于不同包中的bean; 如何自动装配它们?

我有一个应用程序有2个同名的bean,但它们在不同的包中.我的Spring应用程序失败,因为它无法决定采用哪个bean.这有什么解决方案吗?Bean目前不实现特定的接口.

请参阅下面一个已编辑的异常示例:

Caused by:
org.springframework.context.annotation.ConflictingBeanDefinitionException:
Annotation-specified bean name 'dataTransferHandler' for bean class
[aaaaa.ws.handler.DataTransferHandler] conflicts with existing,
non-compatible bean definition of same name and class
[bbbbb.ws.handler.DataTransferHandler]
Run Code Online (Sandbox Code Playgroud)

spring inversion-of-control autowired

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

从属性文件中自动装配布尔基元

嗨我想从属性文件autowire boolean值已经引用以下链接与地图url Spring属性(property-placeholder)自动装配

但我想自动连接一个布尔属性,也提到了问题Spring Autowire原始布尔 Spring Autowire原始布尔值, 但那是bean值,在我的情况下我想使用点分隔的属性值做同样的事情.

${does.it.allow} //它失败,并给出字符串不能转换为boolean #{does.it.allow} //这给用名称来定义无豆/属性确实,但我有正确的属性文件,它证明了容器能够加载它,因为第一个错误.

spring autowired

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

JMeter,JUnit和Spring Java配置

是否可以使用JUnit插件/采样器和Spring Java配置运行JMeter?当我尝试这样做时,没有创建Spring自动装配的bean,虽然测试用例运行,因为尚未创建bean,我得到空指针异常.

我正在使用Spring注释 @SpringJUnit4ClassRunner@ContextConfiguration配置JUnit测试(可以工作).目标是能够编写可以使用JMeter测量性能的JUnit测试用例.

junit spring jmeter autowired

11
推荐指数
1
解决办法
821
查看次数