Ezyfox Bean
Back To Blogs1. Cấu trúc Ezyfox Bean

- Ezy Bean Context: Một đối tượng tổng hợp, quản lý tất cả các thuộc tính, singleton và prototype
- Properties: Ezy Bean Context sẽ giữ tất cả các thuộc tính và tiêm vào các đối tượng singleton và prototype
- Ezy Singleton Factory: Quản lý tất cả các singleton
- Ezy Prototype Factory: Quản lý tất cả các prototype
2. Cài đặt Ezyfox Bean
<dependency> <groupId>com.tvd12</groupId> <artifactId>ezyfox-bean</artifactId> <version>1.2.9</version> </dependency>
3. Các tính năng của Ezyfox Bean
- Quản lý SingletonEzyFox Bean tích hợp cơ chế quét package để phát hiện và khởi tạo các singleton được đánh dấu bằng annotation @EzySingleton. Việc này giúp giảm thiểu khối lượng cài đặt thủ công và đảm bảo singleton được quản lý một cách chặt chẽ
Ví dụ:
import com.tvd12.ezyfox.bean.annotation.EzySingleton; @EzySingleton public class EmployeeDAO { private final DatabaseUtil databaseUtil; private static final Logger logger = LoggerFactory.getLogger(EmployeeDAO.class); public void addEmployee(Employee employee) { executeTransaction(session -> { session.save(employee); logger.info("Added new employee: {}", employee); }); }
EzyFox Bean cho phép tạo các bean prototype, những đối tượng này sẽ được khởi tạo lại mỗi khi được yêu cầu
Ví dụ:
@Setter @EzyPrototype public class BookPriceCalculator { private Book book; @EzyProperty("book.discount") private int discount; public long calculate() { return book.getPrice() - discount; } }
EzyFox Bean tích hợp khả năng đọc các file thuộc tính (định dạng .properties, .yaml, .yml) và tiêm các giá trị vào các bean tương ứng
Ví dụ:
File application.properties
book.name_pattern=[a-zA-Zs]+ book.min_price=1000
@EzyPropertiesBean(prefix = "book") public class BookSetting { @Property("name_pattern") private String namePattern; @Property("min_price") private long minPrice; }
order: max_quantity: 50 allowed_status: ["NEW", "PROCESSING", "COMPLETED"]
@EzyPropertiesBean(prefix = "order") public class OrderSetting { @Property("max_quantity") private int maxQuantity; @Property("allowed_status") private List<String> allowedStatus; }
EzyFox Bean cung cấp hai phương pháp liên kết:
Thông qua constructor (ưu tiên).
Thông qua annotation @EzyAutoBind.
@EzySingleton @AllArgsConstructor public class BookService { private final BookSetting bookSetting; private final BookRepository bookRepository; public void saveBook(Book book) { if (!book.getName().matches(bookSetting.getNamePattern())) { throw new IllegalArgumentException("invalid book name"); } bookRepository.save(book); } }
Có thể tạo một EzyBeanContext và lấy các bean (singleton hoặc prototype) để sử dụng
public final class EzyFoxBeanExample { public static void main(String[] args) { final EzyBeanContext beanContext = EzyBeanContext.builder() .scan("com.tvd12.ezyfox.example.bean") .build(); final BookController bookController = beanContext.getBeanCast(BookController.class); final Book book = new Book(1L, "EzyFox in action", 2000); bookController.saveBook(book); final BookPriceCalculator bookPriceCalculator = beanContext.getBeanCast(BookPriceCalculator.class); bookPriceCalculator.setBook(book); final long bookPrice = bookPriceCalculator.calculate(); System.out.println("book price: " + bookPrice); } }