这个项目当然也有控制器调用的服务。因为它是一个Spring项目,所以用@Service注释对它们进行了注释。
当然,现在我想知道如何将这一点转移到雅加达世界。
用@stateless(我不需要@statelable)注释它的唯一方法是吗?
如果我使用@stateless,我必须把它放在实现类的接口上吗?或者,如果我把它放在接口上,它会被实现类继承吗?
这比您要求的要多一点,但我认为最好是布局更大的画面,而不是说在这里
是添加@stateless
注释的地方。
服务实现实际上并不需要接口。
在这种方法中,接口被一个具有实际公共实现的抽象服务类所取代。孩子只是继承和实施特定的行为。它本质上提供了相同的抽象,但更少的样板。
随便换吧。
package your.model.base.visibility;
import jakarta.json.bind.config.PropertyVisibilityStrategy;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class PublicVisibilityStrategy implements PropertyVisibilityStrategy {
@Override
public boolean isVisible(Field field) {
return true;
}
@Override
public boolean isVisible(Method method) {
return true;
}
}
持久实体
甚至在持久性之前就给每个实体一个id,以确保相等性检查。
package your.model.base;
import jakarta.json.bind.annotation.JsonbTransient;
import jakarta.json.bind.annotation.JsonbVisibility;
import jakarta.persistence.Column;
import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass;
import your.model.base.visibility.PublicVisibilityStrategy;
import java.io.Serializable;
import java.util.Objects;
import java.util.UUID;
@MappedSuperclass
@JsonbVisibility(value = PublicVisibilityStrategy.class)
public abstract class PersistentEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
protected UUID id = UUID.randomUUID();
@Column
@JsonbTransient
protected Integer version;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PersistentEntity that = (PersistentEntity) o;
if (id == null) return false;
return id.equals(that.id);
}
@Override
public int hashCode() {
if (id == null) {
return super.hashCode();
}
return Objects.hash(id);
}
@Override
public String toString() {
return "PersistentEntity { id=" + id + " }";
}
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
}
package your.model;
import jakarta.persistence.Entity;
import your.model.base.PersistentEntity;
@Entity
public class Person extends PersistentEntity {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package your.api.service;
import your.model.base.PersistentEntity;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
public abstract class BaseService<T extends PersistentEntity> {
private Class<T> type;
@PersistenceContext
private EntityManager em;
public List<T> findAll() {
// Just an example, make sure to include a where clause
String statement = String.format("from %s", type.getSimpleName());
return em.createQuery(statement).getResultList();
}
}
个性化服务
这就是@stateless
注释的位置。
它由应用服务器根据请求创建、使用和丢弃。
package your.api.service;
import jakarta.ejb.Stateless;
import your.model.Person;
@Stateless
public class PersonService extends BaseService<Person> {
/** Custom Person methods/queries go here. */
}
package your.api.resource;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import your.api.service.PersonService;
import your.model.Person;
import java.util.List;
@Named
@Produces(MediaType.APPLICATION_JSON)
public class PersonResource {
@Inject
private PersonService service;
@GET
@Path("/")
public Response listAll() {
List<Person> all = service.findAll();
return Response.ok(all).build();
}
}
问题内容: hibernate注释应该放在哪里? 它是我的实例变量上方的线吗?还是在吸气剂之前?还是在二传手之前?还是真的不重要吗? 非常感谢 问题答案: 您可以将它们放在 野外 或 吸气剂上 。从《 Hibernate注释参考指南》中: 2.2.1。将POJO标记为持久实体 (…) 根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性。EJB3规范要求您在将要访问的元素类型上
问题内容: 休眠注释应该放在哪里? 它是我的实例变量上方的线吗?还是在吸气剂之前?还是在二传手之前?还是真的不重要吗? 非常感谢 问题答案: 您可以将它们放在 野外 或 吸气剂上 。从《 Hibernate注释参考指南》中: 2.2.1。将POJO标记为持久实体 (…) 根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性。EJB3规范要求您在将要访问的元素类型上声明注释,即,
我怀疑Spring注释放在哪一层?以下是两种情况: > case:将放置在DAO层中 案例:将放置在服务层中? 我只使用Spring,而不是SpringMVC。
问题内容: 我的项目是这样的: 有人可以告诉我将hibernate.cfg.xml放在哪里吗? 因为出现此错误: 问题答案: 配置文件必须位于上。 根据您的项目,这可以通过不同的方式来完成。 对于 Web应用程序WAR 项目(您正在Servlet容器中运行程序):当应用程序在容器中运行时,将其放入将在类路径上可见的文件中起作用。 对于 Maven的 风格的项目(在Servlet容器没有运行该程序)
问题内容: 你应该将放置在类和/或它们的方法中,还是更好地注释使用DAO对象调用的Service类?还是对两个“层”都进行注释是否有意义? 问题答案: 我认为交易属于服务层。这是了解工作单元和用例的人。如果你将多个DAO注入到一个服务中,而这些DAO需要在单个事务中一起工作,那么这是正确的答案。
问题内容: 我使用Eclipse(3.4),并且类编译时没有警告或错误。我的项目使用一个外部jar文件。 为了从另一个项目(不在Eclipse中)使用此类时,我需要在哪里放置此外部jar文件? 我可以将jar提取到项目文件夹中,但是感觉不对。 编辑:这个问题不是关于在Eclipse中导入jar,而是在Eclipse之外使用它们。 问题答案: 如果要在Eclipse项目中包含JAR文件,通常可以在项