gpt4 book ai didi

java - 在注入(inject)点 [BackedAnnotatedField] @Inject "Interface"带有限定符 @Default 的类型 "Implementation"的不满足依赖关系

转载 作者:行者123 更新时间:2023-11-30 10:55:48 26 4
gpt4 key购买 nike

我想在 Maven 项目中使用 CDI+JSF+HIBERNATE+PRIMEFACES 的实现。我的 pom.xml 是这样的:

    <dependencies>
<!-- PROJECT LOMBOK -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
<scope>provided</scope>
</dependency>
<!-- MYSQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
<!-- HIBERNATE -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.3.Final</version>
</dependency>
<!-- CDI -->
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.2</version>
</dependency>
<!-- SLF4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.12</version>
</dependency>
<!-- PRIMEFACES -->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>5.2</version>
</dependency>
</dependencies>

我的项目结构是这样的,我在不同的类中实现时使用通用接口(interface)。我在 3 个类中实现的一个接口(interface)IGenericDAO 我是这样在UserDao + PersonDao + RoleDao中实现的

public interface IGenericDAO<T> {

void save(T object);

void update(T object);

T getObjectById(int id);

List<T> getAll(); }

实现是

public class UserDAOImpl implements IGenericDAO<User> {

@Override
public void save(User user) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.save(user);
transaction.commit();
} catch (Exception e) {
if (transaction != null)
transaction.rollback();
throw e;
} finally {
session.close();
HibernateUtil.getSessionFactory().close();
}
}

@Override
public void update(User user) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.update(user);
transaction.commit();
} catch (Exception e) {
if (transaction != null)
transaction.rollback();
throw e;
} finally {
session.close();
HibernateUtil.getSessionFactory().close();
}
}

@Override
public User getObjectById(int id) {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
return (User) session.createCriteria(User.class).add(Restrictions.eq("id", id)).list().get(0);
} catch (Exception e) {
throw e;
} finally {
session.close();
HibernateUtil.getSessionFactory().close();
}
}

@SuppressWarnings("unchecked")
@Override
public List<User> getAll() {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
return session.createCriteria(User.class).list();
} catch (Exception e) {
throw e;
} finally {
session.close();
HibernateUtil.getSessionFactory().close();
}
}}

像这样我将服务编码为,我使用通用接口(interface)并在 3 个类中实现代码,如下所示:

public interface IGenericService<T> {

void save(T object);

void update(T object);

T getObjectById(int id);

List<T> getAll(); }

实现

@RequestScoped
public class UserServiceImpl implements IGenericService<User> {
@Setter
@Inject
private IGenericDAO<User> dao;

@Override
public void save(User user) {
dao.save(user);
}

@Override
public void update(User user) {
dao.update(user);
}

@Override
public User getObjectById(int id) {
return dao.getObjectById(id);
}

@Override
public List<User> getAll() {
return dao.getAll();
}}

最后,ManagedBean 是这样的:

@Named(value = "authentication")

@RequestScoped公共(public)类 AuthenticationBean 实现序列化 {

private static final long serialVersionUID = 2288439665206779666L;

@Getter
@Setter
private String message;

@Setter
@Inject
private IGenericService<User> userService;

@PostConstruct
public void init() {
message = userService.getObjectById(1).getLastname();
}}

每次我运行 glassfish 服务器时都会出现这个错误: 异常 0:org.jboss.weld.exceptions.DeploymentException:WELD-001408:不满足类型 IGenericDAO 与限定符 @Default 的依赖关系 在注入(inject)点 [BackedAnnotatedField] @Inject private ma.salaried.service.impl.PaymentServiceImpl.dao

最佳答案

我通过在 DAO 的实现和实现 od 服务中添加 @RequestScoped 解决了这个问题(在我所有的 DAO IMPL 和 Service Impl 中)

@RequestScoped public class EmployeeDAOImpl implements IGenericDAO<Employee> {

@Override
public void save(Employee Employee) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.save(Employee);
transaction.commit();
} catch (Exception e) {
if (transaction != null)
transaction.rollback();
throw e;
} finally {
session.close();
HibernateUtil.getSessionFactory().close();
}
}

@Override
public void update(Employee Employee) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.update(Employee);
transaction.commit();
} catch (Exception e) {
if (transaction != null)
transaction.rollback();
throw e;
} finally {
session.close();
HibernateUtil.getSessionFactory().close();
}
}

@Override
public Employee getObjectById(int id) {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
return (Employee) session.createCriteria(Employee.class).add(Restrictions.eq("id", id)).list().get(0);
} catch (Exception e) {
throw e;
} finally {
session.close();
HibernateUtil.getSessionFactory().close();
}
}

@SuppressWarnings("unchecked")
@Override
public List<Employee> getAll() {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
return session.createCriteria(Employee.class).list();
} catch (Exception e) {
throw e;
} finally {
session.close();
HibernateUtil.getSessionFactory().close();
}
}

和这样的服务

@RequestScoped公共(public)类 EmployeeServiceImpl 实现 IGenericService {

@Setter
@Inject
private IGenericDAO<Employee> dao;

@Override
public void save(Employee Employee) {
dao.save(Employee);
}

@Override
public void update(Employee Employee) {
dao.update(Employee);
}

@Override
public Employee getObjectById(int id) {
return dao.getObjectById(id);
}

@Override
public List<Employee> getAll() {
return dao.getAll();
}}

关于java - 在注入(inject)点 [BackedAnnotatedField] @Inject "Interface"带有限定符 @Default 的类型 "Implementation"的不满足依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33209764/

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