菜鳥学SSH-注釈に基づくSSHは配置を極致に簡素化する
以前からSSH統合に関するブログを書きたいと思っていましたが、SSHを使用するときにそんなに多くのプロファイルが、私たちのコードの全体性を深刻に破壊していると思っています.例えば、2つのエンティティの関係を見るには*.hbm.xmlファイルを照合しなければなりません.Actionを何度も確認するにはapplicationContext*.xmlとstruts*.xmlファイルを照合する必要があります.要するに、多くのプロファイルがコードの全体性を破壊しすぎて、コードの連続性を乱すことがあります.Javaコードを見ながらxmlの構成を見て、注釈を採用すればこの問題をよく解決する必要がある場合が多いからです.
もちろん、注釈方式を採用しても、プロファイルはプログラムの入り口であり、基礎であるため、プロファイルを完全に失うことはできません.サーバは、Web.xmlファイルを最初にロードし、その構成情報を読み出し、プログラムの実行に必要な情報を初期化します.統合SSHなので、Web.xmlファイルではSpringおよびStrutsの情報を構成する必要があります.また、SpringとStrutsも基本的な構成が必要です.
注記を使用すると、プロファイルは少なくとも3つに簡略化できます.web.xml、アプリケーションContext.xml、struts.xmlです.HibernateはSpringに完全に任せることができ、hibernate.cfg.xmlも節約できます.これらの基本的な構成を見てみましょう.
web.xml
web.xmlにはSpringとstrutsの基本構成が含まれています.自動スキャンActionの構成はtomcatに注釈を使ってstrutsを構成するように伝えます.
applicationContext.xml
アプリケーションContext.xmlには、データベース接続の基本情報(hibernateの管理)と、すべてのbeanの自動アセンブリ管理とトランザクションの管理が構成されています.
struts.xml
struts.xmlにはstrutsの基本パラメータがいくつか配置されており、コンテナにSpringで自分を管理するように伝えています.
ここまで基本的なSSHの構成が完了しても、構成は簡単で、各構成に説明があり、理解に問題はないと信じています.基礎の配置はこれだけで、次は私たちの注釈が機能する時です.
userAdd.jsp
ユーザーがページを追加し、ユーザー情報をUserActionに送信します.
UserAction
UserActionは、アクションの名前と返されるページを注釈で構成し、@ResourceアクティビティSpringで注入されたUserManagerオブジェクトを介して、対応する操作を行います.Actionには@Namespace、@InterceptorRefなどの注釈もたくさんありますので、自分の必要に応じて選びましょう.
UserManager
UserManagerは@ServiceによってSpringのコンテナに自動的に組み立てられ、他のコンポーネントにサービスを提供します.@Transactionalでトランザクションの管理を行います.@ResourceでUserDaoオブジェクトを注入します.
UserDao
UserDaoは@RepositoryでSpringのコンテナに自動的に組み立て、@ResourceでSessionfactoryを取得し、Userオブジェクトを永続化します.
User
User@Entityによりエンティティークラスをデータベースにマッピングし、t_を生成userテーブル,@IdによりテーブルのIdを定義し,@GenerateValueによりIdの生成ポリシーを定義する.
さて、ここまで、注釈ベースのSSHは構築済みです.基礎の構築はすでに注釈の簡潔さの優位性を明らかにして、開発の進行に従って、コードは絶えず増加して、その簡潔な風格は伝統的な配置ファイルの方式に比べて更に明らかになります.プロファイルを使用する場合、アクションを1つ追加するたびにstruts.xmlとアプリケーションContext.xmlファイルにコードを追加する必要があります.エンティティごとに、*.hbm.xmlファイルも1つ必要です.プロファイルが氾濫するのは頭を悩ませることです.
注釈のメリットは多く、ますます流行していますが、プロファイルも何の役にも立たないわけではありません.注釈には注釈があり、プロファイルにはプロファイルの妙がある.やはりその言葉は、技術に良し悪しの区別はなく、適当かどうかの違いしかない.技術の良し悪しを追求するのは賢明ではなく、適切なものを選ぶのが本当の設計の道だ.プロファイルより注釈を教えるのではなく、別の方法を紹介し、より適切な方法を見つけることができるかもしれません.
もちろん、注釈方式を採用しても、プロファイルはプログラムの入り口であり、基礎であるため、プロファイルを完全に失うことはできません.サーバは、Web.xmlファイルを最初にロードし、その構成情報を読み出し、プログラムの実行に必要な情報を初期化します.統合SSHなので、Web.xmlファイルではSpringおよびStrutsの情報を構成する必要があります.また、SpringとStrutsも基本的な構成が必要です.
注記を使用すると、プロファイルは少なくとも3つに簡略化できます.web.xml、アプリケーションContext.xml、struts.xmlです.HibernateはSpringに完全に任せることができ、hibernate.cfg.xmlも節約できます.これらの基本的な構成を見てみましょう.
web.xml
ssh
addUser.jsp
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext*.xml
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
filterConfig
classpath:struts.xml
actionPackages
com.ssh
struts2
/*
web.xmlにはSpringとstrutsの基本構成が含まれています.自動スキャンActionの構成はtomcatに注釈を使ってstrutsを構成するように伝えます.
applicationContext.xml
com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1:3307/ssh
root
123456
org.hibernate.dialect.MySQLDialect
update
true
true
false
アプリケーションContext.xmlには、データベース接続の基本情報(hibernateの管理)と、すべてのbeanの自動アセンブリ管理とトランザクションの管理が構成されています.
struts.xml
struts.xmlにはstrutsの基本パラメータがいくつか配置されており、コンテナにSpringで自分を管理するように伝えています.
ここまで基本的なSSHの構成が完了しても、構成は簡単で、各構成に説明があり、理解に問題はないと信じています.基礎の配置はこれだけで、次は私たちの注釈が機能する時です.
userAdd.jsp
ユーザーがページを追加し、ユーザー情報をUserActionに送信します.
UserAction
package com.tgb.ssh.action;
import javax.annotation.Resource;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;
import com.tgb.ssh.model.User;
import com.tgb.ssh.service.UserManager;
@Results( { @Result(name="success",location="/success.jsp"),
@Result(name="failure",location="/failure.jsp") })
public class UserAction extends ActionSupport {
@Resource
private UserManager userManager;
private User user;
@Action(value="addUser")
public String addUser() {
try {
userManager.addUser(user);
} catch (Exception e) {
e.printStackTrace();
return "failure";
}
return "success";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
UserActionは、アクションの名前と返されるページを注釈で構成し、@ResourceアクティビティSpringで注入されたUserManagerオブジェクトを介して、対応する操作を行います.Actionには@Namespace、@InterceptorRefなどの注釈もたくさんありますので、自分の必要に応じて選びましょう.
UserManager
package com.tgb.ssh.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.tgb.ssh.dao.UserDao;
import com.tgb.ssh.model.User;
@Service
@Transactional
public class UserManager {
@Resource
UserDao userDao;
public void addUser(User user) {
userDao.addUser(user);
}
}
UserManagerは@ServiceによってSpringのコンテナに自動的に組み立てられ、他のコンポーネントにサービスを提供します.@Transactionalでトランザクションの管理を行います.@ResourceでUserDaoオブジェクトを注入します.
UserDao
package com.tgb.ssh.dao;
import javax.annotation.Resource;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Repository;
import com.tgb.ssh.model.User;
@Repository
public class UserDao {
@Resource(name="sessionFactory")
private SessionFactory sessionFactory;
public void addUser(User user ) {
Session session = sessionFactory.getCurrentSession();
session.save(user);
}
}
UserDaoは@RepositoryでSpringのコンテナに自動的に組み立て、@ResourceでSessionfactoryを取得し、Userオブジェクトを永続化します.
User
package com.tgb.ssh.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity(name="t_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
User@Entityによりエンティティークラスをデータベースにマッピングし、t_を生成userテーブル,@IdによりテーブルのIdを定義し,@GenerateValueによりIdの生成ポリシーを定義する.
さて、ここまで、注釈ベースのSSHは構築済みです.基礎の構築はすでに注釈の簡潔さの優位性を明らかにして、開発の進行に従って、コードは絶えず増加して、その簡潔な風格は伝統的な配置ファイルの方式に比べて更に明らかになります.プロファイルを使用する場合、アクションを1つ追加するたびにstruts.xmlとアプリケーションContext.xmlファイルにコードを追加する必要があります.エンティティごとに、*.hbm.xmlファイルも1つ必要です.プロファイルが氾濫するのは頭を悩ませることです.
注釈のメリットは多く、ますます流行していますが、プロファイルも何の役にも立たないわけではありません.注釈には注釈があり、プロファイルにはプロファイルの妙がある.やはりその言葉は、技術に良し悪しの区別はなく、適当かどうかの違いしかない.技術の良し悪しを追求するのは賢明ではなく、適切なものを選ぶのが本当の設計の道だ.プロファイルより注釈を教えるのではなく、別の方法を紹介し、より適切な方法を見つけることができるかもしれません.