菜鳥学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


  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つ必要です.プロファイルが氾濫するのは頭を悩ませることです.
注釈のメリットは多く、ますます流行していますが、プロファイルも何の役にも立たないわけではありません.注釈には注釈があり、プロファイルにはプロファイルの妙がある.やはりその言葉は、技術に良し悪しの区別はなく、適当かどうかの違いしかない.技術の良し悪しを追求するのは賢明ではなく、適切なものを選ぶのが本当の設計の道だ.プロファイルより注釈を教えるのではなく、別の方法を紹介し、より適切な方法を見つけることができるかもしれません.