Hướng dẫn tích hợp Spring Framework vào Wicket Framework
Trong các dự án về Web sử dụng Wicket Framework, để việc khởi tạo các component của dự án được thực hiện tự động thì hiện tại có thể tích hợp các framework seasar hoặc spring. Trong bài viết này tôi sẽ trình bày cách tích hợp Wicket + Spring Để tạo project wicket tự động bạn có thể tham khảo ...
Trong các dự án về Web sử dụng Wicket Framework, để việc khởi tạo các component của dự án được thực hiện tự động thì hiện tại có thể tích hợp các framework seasar hoặc spring. Trong bài viết này tôi sẽ trình bày cách tích hợp Wicket + Spring
Để tạo project wicket tự động bạn có thể tham khảo link sau Wicket QuickStart, điều kiện máy của bạn phải cài maven rồi, câu lệnh để tạo 1 project mới
mvn archetype:generate -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=7.5.0 -DgroupId=com.mycompany -DartifactId=myproject -DarchetypeRepository=https://repository.apache.org/ -DinteractiveMode=false
1.Cấu trúc project:
2.Những thư viện sẽ sử dụng trong project
<project> ... <dependencies> <dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-core</artifactId> <version>${wicket.version}</version> </dependency> <dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-spring</artifactId> <version>${wicket.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.eclipse.jetty.aggregate</groupId> <artifactId>jetty-all</artifactId> <version>${jetty9.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.4.RELEASE</version> </dependency> </dependencies> </project>
3. Spring Bean
package com.framgia.service; public interface SampleService { String getMsgHello(); }
package com.framgia.service; import org.springframework.stereotype.Service; '@Service public class SampleServiceImpl implements SampleService { public String getMsgHello() { return "wicket 7.5"; } }
Tạo spring bean với anotation @Service, Để tìm hiểu rõ hơn về spring bean bạn có thể tham khảo thêm bên spring framework, khi thêm anotation này vào thì khi ứng dụng được depyloy thì toàn bộ sẽ được scan để khởi tạo
4.Tiêm vào Spring container
Tạo file applicationContext.xml ở nằm webapp/WEB-INF/applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="com.framgia.service" /> </beans>
5.Tích hợp wicket với spring
Trong class khởi tạo Application của wicket, trong method init
package com.framgia; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.spring.injection.annot.SpringComponentInjector; public class WicketApplication extends WebApplication { /** * @see org.apache.wicket.Application#getHomePage() */ @Override public Class<? extends WebPage> getHomePage() { return HomePage.class; } /** * @see org.apache.wicket.Application#init() */ @Override public void init() { super.init(); // Đăng ký spring framework. getComponentInstantiationListeners().add(new SpringComponentInjector(this)); } }
Trong file web.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>Wicket Web Application</display-name> <filter> <filter-name>wicket.wicketTest</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>com.framgia.WicketApplication</param-value> </init-param> </filter> <filter-mapping> <filter-name>wicket.wicketTest</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
6.Sử dụng service đã được khởi tạo
package com.framgia; import com.framgia.service.SampleService; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.spring.injection.annot.SpringBean; public class HomePage extends WebPage { private static final long serialVersionUID = 1L; '@SpringBean private SampleService helloService; public HomePage(final PageParameters parameters) { super(parameters); add(new Label("version", helloService.getMsgHello())); } }
Chỉ cần thêm @SpringBean trước biến service trong mỗi Page của wicket và sử dụng, vì component đó đã được scan và khởi tao trước đó.
Trên là ví dụ đơn giản về cách tích hợp wicket và spring, source code bạn có thể down về từ đây wicket-spring