Cho đến nay, tôi hầu như luôn làm việc với các EJB không có giao diện và hiểu một chút về nhu cầu chú thích @Local. Hãy xem xét ví dụ này:EJB 3.1. Chú thích @Local có cần thiết không?
public interface MyBeanIntf { void doStuff(); }
@Stateless
public class MyBean implements MyBeanIntf { public void doStuff(){ } }
Nếu MyBeanIntf
được đánh dấu là @Local
? Tôi không thấy bất kỳ lợi ích từ đó, bởi vì ngay cả khi tôi không chú thích nó như @Local
, tôi vẫn có thể sử dụng DI để tiêm đúng nó vào điều khiển UI:
@Named
@SessionScoped
public class TestController implements Serializable {
// injection works perfectly, even when MyBeanIntf is not marked as @Local
@Inject
private MyBeanIntf myBean;
// or even like this:
// @EJB
// private MyBeanIntf myBean;
}
Hãy làm cho nó phức tạp hơn:
public interface MyBeanIntf { void doStuff(); }
public class MySuperBean implements MyBeanIntf { public void doStuff() { } }
@Stateless
public class MyBean extends MySuperBean { }
Có phải MyBean
hiện được coi là hợp lệ Local EJB
? Tôi có một số nghi ngờ bởi vì nó thực hiện các giao diện gián tiếp.
Cảm ơn câu trả lời. Đối với liên kết đến đặc điểm kỹ thuật, tôi vẫn còn một số nghi ngờ. Nó thảo luận một cách rõ ràng về các siêu lớp, đó là các bean phiên. Nhưng nếu chúng chỉ là các lớp trừu tượng mà không có chú thích '@ Stateless' hoặc' @ Stateful' thì sao? – jFrenetic
Chắc chắn, tôi không chắc chắn về điều đó trong 100%, nhưng hãy xem bài đăng đã chỉnh sửa - có thể nó sẽ giúp ích. –
Cảm ơn sự nhấn mạnh. Tôi đọc phần đó trong bản thân, nhưng bằng cách nào đó đã bỏ qua nó. – jFrenetic