gpt4 book ai didi

java - 没有 bean 有资格注入(inject)到注入(inject)点 [JSR-299 §5.2.1]

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:47:48 24 4
gpt4 key购买 nike

我想注入(inject)默认的 Java 记录器。然而,Eclipse 强调它并声明“没有 bean 有资格注入(inject)到注入(inject)点 [JSR-299 §5.2.1]”

如果我仍然部署,则会抛出以下异常。为什么它无法注入(inject) Java Logger? EntityManager 相同,但我自己的 UserRepository Bean 不同。

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Logger] with qualifiers [@Default] at injection point [[field] 

代码:

import java.util.logging.Logger;

import javax.ejb.Stateless;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import javax.persistence.EntityManager;

import com.terry.webapp.data.UserRepository;
import com.terry.webapp.model.usermgmt.User;


// The @Stateless annotation eliminates the need for manual transaction demarcation
@Stateless
public class LoginService {

@Inject
private Logger log;

@Inject
private EntityManager em;

@Inject
private UserRepository repository;

public User login(User user) {
log.info("login " + user.getUsername());

User rUser = repository.findByCredentials(user.getUsername(), user.getPassword());
return rUser;
}
}

最佳答案

要注入(inject)记录器,您需要一个生产者方法,该方法提供一个您可以注入(inject)的 Logger

  import java.util.logging.Logger;   

import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;

public class LoggerProduer {

@Produces
public Logger produceLog(InjectionPoint injectionPoint) {
return Logger.getLogger(injectionPoint.getMember().getDeclaringClass()
.getName());
}
}

EntityManager 需要使用 @PersistenceContext(unitName="pscontext") 注入(inject),因为它是使用 persistence.xml 中的数据创建的, 所以你的 EntityManager 必须是

   @PersistenceContex(unitName="pscontext")
private EntityManager em;

关于java - 没有 bean 有资格注入(inject)到注入(inject)点 [JSR-299 §5.2.1],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19775901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com