1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Giới thiệu Spring Roo, Phần 5: Viết các add-on bao đóng và nâng cao cho Spring Roo pptx

19 367 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giới thiệu Spring Roo, Phần 5: Viết Các Add-on Bao Đóng Và Nâng Cao Cho Spring Roo
Trường học Trường Đại Học Công Nghệ Thông Tin
Thể loại tài liệu
Định dạng
Số trang 19
Dung lượng 172,84 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giới thiệu Spring Roo, Phần 5: Viết các add-on bao đóng và nâng cao cho Spring Roo Giới thiệu về add-on nâng cao Add-on nâng cao cho phép Spring Roo làm mọi thứ mà một add-on đơn giản

Trang 1

Giới thiệu Spring Roo, Phần 5: Viết các add-on bao

đóng và nâng cao cho Spring Roo

Giới thiệu về add-on nâng cao

Add-on nâng cao cho phép Spring Roo làm mọi thứ mà một add-on đơn giản có thể làm, như cập nhật một tệp POM của Maven với các phụ thuộc hoặc các plug-in, cập nhật hoặc thêm các tệp cấu hình cộng với tăng cường các kiểu Java hiện có và đưa vào các kiểu Java mới bằng cách sử dụng các ITD của AspectJ Khả năng thêm mã nguồn làm cho các add-on nâng cao rất mạnh mẽ

so với tất cả các add-on khác Trước khi bạn tạo một add-on nâng cao Spring Roo, hãy xem xét một add-on nâng cao hiện có do Spring Roo cung cấp

Về đầu trang

Hoạt động của Add-on nâng cao

Một add-on nâng cao là JPA, thực hiện công việc liên quan đến sự tồn tại lâu bền, có nghĩa là, thêm sự hỗ trợ cho các cơ sở dữ liệu và tạo ra các thực thể mới Để thấy JPA này đang hoạt động, hãy mở trình shell của Roo và thực hiện các lệnh trong Liệt kê 1 Trong bài này, tôi sử dụng phiên bản Spring Roo 1.2.0.M1

Liệt kê 1 Ví dụ JPA

project topLevelPackage com.dw.demo projectName entity-demo

jpa setup database FIREBIRD provider HIBERNATE

entity class ~.domain.Book

Cả hai lệnh jpa setup (thiết lập jpa) và lệnh entity (thực thể) đều tương ứng với một add-on nâng cao được gọi là org.springframework.roo.addon.jpa Kết quả của lệnh jpa setup và lệnh entity trên trình shell của Roo cho phép phân biệt rõ giữa các add-on đơn giản và nâng cao Liệt kê 2 cho thấy kết quả của lệnh set JPA

Liệt kê 2 Kết quả của lệnh set JPA

Created SRC_MAIN_RESOURCES/META-INF/spring/database.properties

Updated ROOT/pom.xml [added dependencies ]

Updated SRC_MAIN_RESOURCES/META-INF/spring/applicationContext.xml

Created SRC_MAIN_RESOURCES/META-INF/persistence.xml

Kết quả của lệnh jpa setup cho thấy nó đang thực hiện các chức năng cấu hình, chẳng hạn như thêm các phụ thuộc vào pom.xml, cập nhật Spring applicationContext.xml và tạo ra tệp

persistence.xml đặc trưng-tồn tại lâu bền Ở đây đã giả sử rằng lệnh JPA setup tương ứng với

Trang 2

một add-on đơn giản vì nó không tạo ra hoặc cập nhật mã nguồn Java Hãy sử dụng add-on đơn giản cho các kịch bản tương tự như kịch bản thiết lập được hiển thị ở trên

Liệt kê 3 cho thấy kết quả của lệnh entity

Liệt kê 3 Kết quả của lệnh

Created SRC_MAIN_JAVA/com/dw/demo/domain

Created SRC_MAIN_JAVA/com/dw/demo/domain/Book.java

Created SRC_MAIN_JAVA/com/dw/demo/domain/Book_Roo_Configurable.aj

Created SRC_MAIN_JAVA/com/dw/demo/domain/Book_Roo_Jpa_Entity.aj

Created SRC_MAIN_JAVA/com/dw/demo/domain/Book_Roo_Entity.aj

Created SRC_MAIN_JAVA/com/dw/demo/domain/Book_Roo_ToString.aj

Kết quả trên cho thấy việc tạo ra một tệp Java gọi là Book.java và 4 tệp *.aj Quy tắc vàng để xác định một add-on nâng cao là việc tạo ra các tệp Java hoặc các tệp *.aj hoặc cả hai, như trong trường hợp của lệnh entity Các tệp *Roo_*.aj này được gọi là các ITD (Inter-type Declarations – Các khai báo giữa các kiểu) Các ITD cho phép một kiểu (một khía cạnh) khai báo cho một kiểu khác, có nghĩa là, bạn có thể sửa đổi cấu trúc tĩnh của bất kỳ kiểu nào bằng cách thêm các phương thức, các trường hoặc thay đổi hệ thống phân cấp kiểu của chúng Roo sử dụng một ITD làm một tạo phẩm tạo mã và quản lý chúng trong suốt vòng đời của chúng Các ITD cho phép Roo tạo mã trong một đơn vị biên dịch riêng biệt, nhưng chúng được kết hợp vào trong cùng một lớp đã biên dịch

Sau khi xem kết quả của lệnh entity, hãy xem các tạo phẩm này (các tệp java và aj) được Spring Roo tạo ra như thế nào Xem Liệt kê 4 để biết một ví dụ mẫu của một tệp Book.java

Liệt kê 4 Một tệp Book.java

package com.dw.demo.domain;

import org.springframework.roo.addon.entity.RooEntity;

import org.springframework.roo.addon.javabean.RooJavaBean;

import org.springframework.roo.addon.tostring.RooToString;

@RooJavaBean

@RooToString

@RooEntity

public class Book {

}

Tệp Java này trông bình thường, ngoại trừ các chú thích trên lớp Khi xem xét các tên của các chú thích và các tệp aj, rõ ràng là một số các chú thích tương ứng với chức năng được các tệp aj thêm vào Ví dụ, RooToString tương ứng với tệp Book_Roo_ToString.aj và nó thêm phương thức toString() RooEntity tương ứng với Book_Roo_Entity aj, Book_Roo_Jpa_Entity và các phương thức liên quan đến tồn tại lâu bền Tạm thời bây giờ bạn có thể để yên phần còn lại

Trang 3

Để hiểu chú thích dẫn đến việc tạo các ITD ra sao, hãy khám phá cách Spring Roo cung cấp các chức năng của add-on nâng cao

1 Trong lúc khởi động trình shell của Roo, nó sẽ quét tất cả các lớp và đăng ký tất cả các lớp nào thực hiện giao diện CommandMarker Giao diện CommandMarker cho Roo biết rằng các lớp này sẽ định nghĩa các lệnh mà add-on này có thể thực hiện

2 Tất cả các add-on nâng cao đăng ký các dịch vụ của chúng với thời gian chạy OSGi được cung cấp bởi Spring Roo Các dịch vụ này chỉ rõ các điều kiện mà theo đó nó sẽ kích hoạt việc tạo mã Đối với tất cả các add-on nâng cao, điểm kích hoạt là sự có mặt của một chú thích Ví dụ, một add-on nâng cao để tạo phương thức toString() chỉ được kích hoạt nếu một kiểu Java có chú thích RooToString Điều này cũng đúng cho các chú thích khác

3 Khi sử dụng entity class ~.domain.Book, add-on sẽ tạo ra một tệp Java được gọi

là Book.java với các chú thích add-on khác kích hoạt khi một kiểu Java có các chú thích này và các tệp aj được viết cho chúng

Thông tin chi tiết sẽ rõ hơn khi bạn tạo add-on nâng cao riêng của mình

Add-on org.springframework.roo.addon.jpa chỉ là một ví dụ về các add-on nâng cao được Spring Roo cung cấp Các add-on nâng cao khác bao gồm GWT, các driver, JSON và nhiều hơn nữa Bản phát hành Spring Roo 1.2.0 có thêm hai add-on nâng cao—đó là addon-equals và addon-JSF add-on addon-equals cung cấp cách thực hiện các phương thức so sánh bằng nhau (equals) và mã băm (hashcode) cho một thực thể, còn add-on addon-JSF cung cấp sự hỗ trợ JSF trong các ứng dụng Spring Roo Để xem ảnh chụp màn hình Spring Roo mới nhất, hãy hoặc là xây dựng mã Spring Roo hoặc là tải về ảnh chụp màn hình hiện có từ kho lưu trữ Spring Roo

Về đầu trang

Đưa phương thức compareTo () vào lớp My Entity

Thông thường cần phải có các đối tượng hoặc thực thể để thực hiện giao diện

java.lang.Comparable và cung cấp cách thực hiện phương thức compareTo() Giao diện

Comparable (có thể so sánh được) bắt buộc các đối tượng của mỗi lớp thực hiện nó phải làm theo toàn bộ thứ tự Khi bạn thực hiện Comparable, bạn có thể:

1 Gọi java.util.Collections.sort và java.util.Collections.binarySearch

2 Gọi java.util.Arrays.sort và java.util.Arrays.binarySearch

3 Sử dụng các đối tượng làm các khóa trong một java.util.TreeMap

4 Sử dụng các đối tượng làm các phần tử trong một java.util.TreeSet

Trong bài này, bạn sẽ xây dựng một add-on nâng cao sẽ cung cấp một cách thực hiện

compareTo() cho các thực thể được tạo ra trong ứng dụng của bạn Vì bạn muốn thêm mã Java vào ứng dụng của mình, nên bạn phải tạo ra một add-on nâng cao

Về đầu trang

Trang 4

Thiết lập dự án

Tài liệu hướng dẫn Spring Roo giải thích rõ cách thiết lập một dự án và kho lưu trữ Maven trên

mã Google (Google code), do đó, không cần thiết phải lặp lại nó ở đây Lưu ý rằng tôi sẽ sử dụng

"spring-dw-roo-compareto-addon" làm tên dự án

Nếu bạn chưa sử dụng phiên bản mới nhất của Spring Roo, 1.2.0.RC1, hãy tải nó từ trang web của dự án Giải nén và cài đặt nó như đã giải thích trong Phần 1

Spring Roo đã không ủng hộ hoặc đã loại bỏ một số các lớp được sử dụng trong các phiên bản trước đó

Về đầu trang

Tạo một add-on nâng cao

Sau khi bạn thiết lập projectp, bạn sẽ thấy một thư mục tên là spring-dw-roo-compareto-addon chỉ có một thư mục svn Từ dòng lệnh, chuyển vào thư mục spring-dw-roo-compareto-addon và khởi động trình vỏ Roo Rồi gõ lệnh sau:

addon create advanced topLevelPackage org.xebia.roo.addon.compareto

projectName spring-dw-roo-compareto-addon

Thế là xong! Bạn vừa mới tạo ra một add-on nâng cao

Tiếp theo, trên trình shell của Roo, bắt đầu thực hiện lệnh perform package (thực hiện gói) để tạo ra một tệp jar của add-on Liệt kê 5 cho thấy các tệp được lệnh addon create advanced tạo

ra

Liệt kê 5 Các tệp được lệnh addon create advanced tạo ra

Created ROOT/pom.xml

Created SRC_MAIN_JAVA

Created SRC_MAIN_RESOURCES

Created SRC_TEST_JAVA

Created SRC_TEST_RESOURCES

Created SPRING_CONFIG_ROOT

Created ROOT/readme.txt

Created ROOT/legal

Created ROOT/legal/LICENSE.TXT

Created SRC_MAIN_JAVA/org/xebia/roo/addon/compareto

Created SRC_MAIN_JAVA/org/xebia/roo/addon/compareto/ComparetoCommands.java Created SRC_MAIN_JAVA/org/xebia/roo/addon/compareto/ComparetoOperations.java Created

SRC_MAIN_JAVA/org/xebia/roo/addon/compareto/ComparetoOperationsImpl.java Created SRC_MAIN_JAVA/org/xebia/roo/addon/compareto/ComparetoMetadata.java Created

SRC_MAIN_JAVA/org/xebia/roo/addon/compareto/ComparetoMetadataProvider.java Created SRC_MAIN_JAVA/org/xebia/roo/addon/compareto/RooCompareto.java

Trang 5

Created ROOT/src/main/assembly

Created ROOT/src/main/assembly/assembly.xml

Created SRC_MAIN_RESOURCES/org/xebia/roo/addon/compareto

Created SRC_MAIN_RESOURCES/org/xebia/roo/addon/compareto/configuration.xml

Một số các tệp được tạo ra như pom.xml, readme.txt và license.txt, không cần bất kỳ lời giới thiệu nào vì chúng đã được thảo luận trong Phần 3 và là tự giải thích rồi Các tạo phẩm thú vị hơn là:

 ComparetoCommands.java

 ComparetoOperations.java

 ComparetoOperationsImpl.java

 ComparetoMetadata.java

 ComparetoMetadataProvider.java

 RooCompareto.java

Bây giờ hãy xem xét từng tạo phẩm được tạo ra

 ComparetoCommands.java : Lớp này thực hiện giao diện CommandMarker và trưng ra hai loại phương thức—một loại có chú thích CliAvailablityIndicator và loại khác có chú thích CliCommand Chú thích CliAvailablityIndicator cho Spring Roo biết khi nào lệnh này sẽ nhìn thấy được Ví dụ lệnh 'entity' sẽ không được tạo sẵn trước khi người dùng định nghĩa các giá trị cài đặt tồn tại lâu bền trong trình shell của Roo hoặc trực tiếp trong dự án Các phương thức được chú thích với @CliCommand sẽ đăng ký lệnh này với trình shell của Roo Chú thích @CliCommand có hai thuộc tính: value (giá trị), định nghĩa tên lệnh và help (trợ giúp), định nghĩa thông báo trợ giúp được hiển thị khi gõ lệnh help

Để biết thêm về một giải thích chi tiết của lớp *Commands, hãy tham khảo Phần 3

 ComparetoOperationsImpl.java : Lớp ComparetoCommands ủy quyền tất cả công việc cho lớp ComparetoOperationsImpl Bốn phương thức được tạo ra trong lớp này là:

o isCommandAvailable(): Phương thức này được gọi bởi phương thức được chú thích với chú thích CliAvailabilityIndicator ComparetoCommands trong lớp

ComparetoCommands để kiểm tra xem lệnh này có nhìn thấy được hay không Điều này là để bảo đảm các lệnh nhận biết về bối cảnh Phương thức này thực hiện các việc xác nhận hợp lệ khác nhau Ví dụ, nếu dự án đã được tạo ra, thì chỉ khi đó lệnh này sẽ nhìn thấy được hoặc nếu đã thiết lập tính tồn tại lâu bền, thì chỉ khi đó lệnh này sẽ nhìn thấy được Không bắt buộc phải có một điều kiện để nhìn thấy được lệnh này Để chắc chắn rằng lệnh luôn nhìn thấy được, chỉ cần trả về true (đúng)

o setup(): Phương thức này được gọi bởi phương thức setup() trong lớp

ComparetoCommands được chú thích với @CliCommand Mã, làm cho lớp này trở nên rõ ràng, chịu trách nhiệm về thực hiện các nhiệm vụ liên quan đến thiết lập chẳng hạn như thêm các phụ thuộc Maven, thêm các kho lưu trữ Maven hoặc tạo hoặc cập nhật các tệp bối cảnh Spring (như đã thực hiện với add-on Roo Jamon trong Phần 3)

o annotateType(): Phương thức này và annotateAll() là các phương thức mới chưa có trong các add-on đơn giản Chức năng của phương thức này là thêm một

Trang 6

chú thích (RooCompareto) vào kiểu Java đã chỉ rõ Phương thức này sử dụng một

số dịch vụ do Spring Roo-cung cấp để tìm nạp các chi tiết Class (Lớp) cho kiểu Java đã cho và nối thêm chú thích RooJCompareto vào nó

o annotateAll(): Phương thức này tìm tất cả các kiểu được chú thích với chú thích RooJavaBean gọi phương thức annotateType() trên tất cả các kiểu đó Hãy sử dụng phương thức này khi tất cả các thực thể cần có chú thích

RooCompareto

 RooCompareto.java: Sự có mặt của chú thích này làm cho add-on tạo mã

 ComparetoMetadataProvider.java: Lớp này là một dịch vụ Spring Roo và được gọi bởi Roo để lấy ra siêu dữ liệu cho add-on Lớp này đăng ký các thủ tục trigger để thêm và loại bỏ siêu dữ liệu Không cần phải có thay đổi nào trong lớp này, nhưng hãy nhớ rằng lớp này có một phương thức gọi là getMetaData (), sẽ được gọi bởi Spring Roo bất cứ khi nào có bất kỳ kiểu Java nào có chú thích RooCompareto

 ComparetoMetadata.java: Lớp này chịu trách nhiệm để tạo ra ITD tương ứng với

add-on Trong đoạn mã được tạo ra, nó sử dụng một lớp được gọi là

ItdTypeDetailsBuilder để tạo ra một ITD có một trường và một phương thức Phần dưới đây trong bài này, bạn sẽ thay đổi mã mặc định được tạo ra để đáp ứng các yêu cầu thêm một phương thức compareTo và thực hiện giao diện Comparable

Về đầu trang

Sửa đổi add-on để đáp ứng các yêu cầu

Bạn muốn tạo ra một add-on, mà nó sẽ cần thêm phương thức compareTo vào các lớp thực thể Bạn sẽ:

 Thêm phụ thuộc Maven của commons-lang phiên bản 3.1 vào dự án đích Điều này là cần thiết bởi vì commons-lang cung cấp một lớp của trình xây dựng tên là

CompareToBuilder mà trình này sẽ được sử dụng để xây dựng phương thức compareTo

 Tạo lớp thực thể thực hiện giao diện Comparable

 Tạo một ITD cho phương thức compareTo

Thêm sự phụ thuộc Maven

Để đáp ứng các yêu cầu này, cần có các thay đổi trong các lớp ComparetoOperationsImpl và

ComparetoMetadata Hãy thực hiện từng thay đổi này

1 Đầu tiên, hãy thêm phụ thuộc commons-lang của Maven vào dự án đích Cập nhật tệp Configuration.xml để có phụ thuộc commons-lang thay cho gói phụ thuộc Spring được cung cấp theo mặc định, như trong Liệt kê 6

Liệt kê 6 Cập nhật tệp Configuration.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<configuration>

Trang 7

<dependencies>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.1</version>

</dependency>

</dependencies>

</configuration>

2 Tiếp theo, sửa đổi mã thực hiện phương thức setup() trong lớp

ComparetoOperationsImpl để đọc phụ thuộc commons-lang của Maven thay cho phụ

thuộc bó Spring của Maven, như trong Liệt kê 7 Phương thức annotateType và

annotateAll() không được hiển thị ở đây vì chúng không có bất kỳ thay đổi nào

Liệt kê 7 Sửa đổi việc thực hiện phương thức setup ()

@Component

@Service

public class ComparetoOperationsImpl implements ComparetoOperations {

@Reference

private ProjectOperations projectOperations;

@Reference

private TypeLocationService typeLocationService;

@Reference

private TypeManagementService typeManagementService;

/** {@inheritDoc} */

public void setup() {

// Install the add-on Google code repository needed to get the

annotation

projectOperations.addRepository("",

new Repository("Compareto Roo add-on repository",

"Compareto Roo add-on repository",

"https://spring-dw-roo-compareto-addon.googlecode.com/svn/repo")); List<Dependency> dependencies = new ArrayList<Dependency>();

// Install the dependency on the add-on jar (

dependencies.add(new Dependency("org.xebia.roo.addon.compareto", "org.xebia.roo.addon.compareto", "0.1.0.BUILD-SNAPSHOT",

DependencyType.JAR, DependencyScope.PROVIDED));

Element configuration = XmlUtils.getConfiguration(getClass());

for (Element dependencyElement : XmlUtils.findElements(

"/configuration/dependencies/dependency",

configuration)) {

dependencies.add(new Dependency(dependencyElement));

}

projectOperations.addDependencies("", dependencies);

}

}

Trang 8

3

Những thay đổi được thực hiện cho đến nay là tương tự như những thay đổi được sử dụng để tạo

ra add-on đơn giản Jamon trong Phần 3

Tạo lớp thực thể triển khai giao diện Comparable

Sau khi thực hiện các thay đổi về mã để thêm phụ thuộc Maven, bạn cần phải chắc chắn rằng lớp thực thể của bạn thực hiện giao diện java.lang.Comparable Để làm điều đó, hãy sửa đổi ITD do lớp ComparetoMetadata tạo ra Các lớp siêu dữ liệu tạo ra ITD bằng cách sử dụng lớp

ItdTypeDetailsBuilder, nó cung cấp các phương thức add khác nhau để thêm các phương thức, các trường, các chú thích, giao diện và nhiều hơn nữa vào một ITD Để tạo ra một kiểu Java thực hiện một giao diện, hãy sử dụng phương thức addImplementsType trong lớp

ItdTypeDetailsBuilder, như trong Liệt kê 8 Tôi chỉ hiển thị các hàm dựng

ComparetoMetadata vì việc xây dựng ITD diễn ra trong hàm dựng

Liệt kê 8 Thực hiện giao diện java.lang.Comparable

public ComparetoMetadata(String identifier, JavaType aspect Name,

PhysicalTypeMetadata governorPhysicalTypeMetadata) {

super(identifier, aspect Name, governorPhysicalTypeMetadata);

Assert.isTrue(isValid(identifier), "Metadata identification string '" +

identifier + "' does not appear to be a valid");

JavaType comparableInterface = new JavaType("java.lang.Comparable"); builder.addImplementsType(comparableInterface);

itdTypeDetails = builder.build();

}

Tạo một ITD cho phương thức compareTo

Sau khi tạo ra một kiểu Java thực hiện giao diện Comparable, bạn phải cung cấp mã lệnh thực hiện phương thức compareTo Lớp CompareToBuilder cung cấp một giao diện uyển chuyển để tạo ra phương thức compareTo add-on equals của Spring Roo sử dụng EqualsBuilder và

HashCodeBuilder để cung cấp mã thực hiện cho phương thức equals và hashcode Hãy lấy một

ví dụ để chắc chắn là CompareToBuilder giúp đỡ trong việc tạo ra phương thức compareTo như thế nào Giả sử bạn có một thực thể được gọi là Book và bạn muốn cung cấp việc thực hiện compareTo cho nó bằng cách sử dụng CompareToBuilder Liệt kê 9 cho thấy lớp Book và phương thức compareTo

Liệt kê 9 Lớp Book và phương thức compareTo

import org.apache.commons.lang3.builder.CompareToBuilder;

Trang 9

public class Book implements Comparable {

private String title;

private String author;

private double price;

public Book(String title, String author, double price) {

this.title = title;

this.author = author;

this.price = price;

}

// getters and setters

public int compareTo(Book o) {

if(!(o instanceof Book)){

return -1;

}

Book book = (Book)o

return new CompareToBuilder().append(this.title,

book.title).append(this.author,

book.author).append(this.price, book.price).toComparison();

}

@Override

public String toString() {

return "Book [title=" + title + ", author=" + author + ", price=" + price + "]";

}

}

Phương thức compareTo trong Liệt kê 9 thực hiện như sau:

 Nếu o không phải là instanceOfBook thì trả về -1

 Nếu o là instanceOfBook thì áp kiểu o là Book

 Tạo một đối tượng của lớp CompareToBuilder và sau đó gọi phương thức append (nối thêm) trên các trường

Xây dựng phương thức compareTo dần dần theo các bước sau:

1 Nếu o không phải là instanceof Book thì trả về -1

Trước khi bạn thêm việc kiểm tra instanceOf, hãy tạo ra phương thức compareTo Xem Liệt kê 10

Liệt kê 10 Tạo phương thức compareTo

public ComparetoMetadata(String identifier, JavaType aspect Name, PhysicalTypeMetadata governorPhysicalTypeMetadata) {

Trang 10

super(identifier, aspect Name, governorPhysicalTypeMetadata); Assert.isTrue(isValid(identifier),

"Metadata identification string '" + identifier +

"' does not appear to be a valid");

JavaType comparableInterface = new JavaType("java.lang.Comparable"); builder.addImplementsType(comparableInterface);

builder.addMethod(getCompareToMethod());

itdTypeDetails = builder.build();

}

private MethodMetadata getCompareToMethod() {

final JavaType parameterType = JavaType.OBJECT;

final List<JavaSymbolName> parameterNames =

Arrays.asList(new JavaSymbolName("obj"));

final InvocableMemberBodyBuilder bodyBuilder =

new InvocableMemberBodyBuilder();

bodyBuilder.appendFormalLine("return -1;");

final MethodMetadataBuilder methodBuilder = new

MethodMetadataBuilder(getId(),

Modifier.PUBLIC, new JavaSymbolName("compareTo"),

JavaType.INT_PRIMITIVE,

AnnotatedJavaType.convertFromJavaTypes(parameterType),

parameterNames, bodyBuilder);

return methodBuilder.build();

}

getCompareToMethod() tạo ra siêu dữ liệu của phương thức compareTo bằng cách sử dụng lớp MethodMetadataBuilder Lớp MethodMetadataBuilder là một lớp Builder

do Spring Roo cung cấp để xây dựng siêu dữ liệu phương thức Để xây dựng siêu dữ liệu phương thức, đầu tiên hãy xây dựng một đối tượng MethodMetadataBuilder, chuyển cho nó các đối số làm trình sửa đổi, tên phương thức, kiểu trả về, danh sách tham số hoặc một trình xây dựng thân phương thức để xây dựng siêu dữ liệu cho phương thức

compareTo như trong Liệt kê 11

Liệt kê 11 Kiểm tra instanceof

private MethodMetadata getCompareToMethod() {

final JavaType parameterType = JavaType.OBJECT;

String parameterName = "obj";

final List<JavaSymbolName> parameterNames =

Arrays.asList(new JavaSymbolName(parameterName));

final InvocableMemberBodyBuilder bodyBuilder =

new InvocableMemberBodyBuilder();

final String typeName = destination.getSimpleTypeName();

bodyBuilder.appendFormalLine("if (!(" + parameterName +

" instanceof " + typeName + ")) {");

Ngày đăng: 22/02/2014, 15:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w