Springフレームの勉強(翌日)

11472 ワード

xmlファイルのインポート他のxmlファイルの設定
springフレームに複数のxmlファイルを配置したら、プロファイルを読み込む時にこれらのxmlファイルを全部読み込むことができます.全体のxmlファイルを読むだけでもいいです.この合計のxmlファイルに他のxmlを全部導入します.たとえば:
student.xmlファイル:

    
        25
    

teacher.xmlファイル:

        //ref=""      bean

import.xmlファイル:


メール:
String[] path = {"com/briup/ioc/imp/import.xml"};
ApplicationContext container = new ClassPathXmlApplicationContext(path);

Teacher t = (Teacher) container.getBean("teacher");
System.out.println(t.getStudent());
beanインスタンスを作成する方法
xmlファイルにはbeanの構成があり、このbeanに対応するjavaクラスには無参画のコンストラクタが存在します.このとき、spring容器は反射を用いて無参画のコンストラクタを呼び出してインスタンスを作成することができます.
工場クラスによるインスタンス獲得(工場クラスによるインターフェースFactoryBean>の実現)
スプリングの中のPropertyPlaceholderConfigrer類の使用に注意して、httmlsingleで直接にクラス名を検索すればいいです.
例えば、工場類は指定インターフェースを実現し、インターフェースの三つの抽象的な方法を実現する.
    public class ConnectionFactory implements FactoryBean{
    private String driver;
    private String url;
    private String username;
    private String password;

    @Override
    public Connection getObject() throws Exception {
        Class.forName(driver);
        Connection conn = 
            DriverManager.getConnection(url,username,password);
        return conn;
    }

    @Override
    public boolean isSingleton() {//        
        // TODO Auto-generated method stub
        return false;
    }
    
    @Override
    public Class getObjectType() {
        // TODO Auto-generated method stub
        return Connection.class;
    }
    set/get
    ....
  }
xmlファイル:
このクラスは工場類ですので、私達が名前connで容器の中で対象を取る時、貰ったのはこの工場類の対象ではなく、この工場類の対象が工場方法を呼び出して帰った対象です.
  
    
        ${driver}//         key—value    value
    
    
    
        ${url}
    
    
    
        ${username}
    
    
    
        ${password}
    
  
  
  
  
    
        classpath:oracle.properties
    
  
メール:
String path = "com/briup/ioc/factory/factory.xml";
ApplicationContext container = 
        new ClassPathXmlApplicationContext(path);
Connection conn = (Connection) container.getBean("conn");
System.out.println(conn);
インスタンス工場を通じてインスタンスを取得する(任意のインターフェースまたは親クラスを実装または継承する必要はない)
スプリングの中のPropertyPlaceholderConfigrer類の使用に注意して、httmlsingleで直接にクラス名を検索すればいいです.
例えば、普通の工程類
  public class ConnectionFactory{
    private String driver;
    private String url;
    private String username;
    private String password;
    
    public Object getConnection() throws Exception {
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url,username,password);
        return conn;
    }
    get/set
    ....
  }

  xml  :
 
    
        ${driver}
    
    
    
        ${url}
    
    
    
        ${username}
    
    
    
        ${password}
    
 
    
 
 
 
 
 
    
        classpath:oracle.properties
    
 
メール:
String path = "com/briup/ioc/instanceFactory/instanceFactory.xml";
ApplicationContext container = 
    new ClassPathXmlApplicationContext(path);
Connection conn = (Connection) container.getBean("conn");
System.out.println(conn);
静的工場を通じて実例を得る.
例えば、静的方法を意味する工場類
  public class ConnectionFactory{
    private static String driver = "oracle.jdbc.driver.OracleDriver";
    private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
    private static String username = "briup";
    private static String password = "briup";
    
    public static Object getConnection() throws Exception {
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url,username,password);
        return conn;
    }
  }

  xml  :
  
  
メール:
String path = "com/briup/ioc/staticFactory/staticFactory.xml";
ApplicationContext container = new ClassPathXmlApplicationContext(path);
Connection conn = (Connection) container.getBean("conn");
System.out.println(conn);
カスタムプロパティエディタProptyEditor
Springでは、特定の文字列をオブジェクトに変換するために属性エディタを使用することができます.String-->object java.beans.PropertyEditor(JDKのインターフェース)は、xmlファイル中の文字列を特定のタイプに変換しながら、JDKは、インプリメンテーションクラスjava.beans.PropertyEditorSupport Springを提供します.注入時に、タイプが一致しない場合(例えば、Addresタイプが必要ですが、ユーザがStringを転送しました).該当する属性エディタを呼び出して変換します.springは属性エディタのset Astring Textを呼び出して、ユーザーから送られた文字列を処理します.そして、getValue()メソッドを呼び出して処理したオブジェクトを取得しますので、コードの処理が終わったらsetValue方法を使ってください.でないと、springはgetValueメソッドを呼び出して、あなたの処理後のオブジェクトが取れません.
カスタム属性エディタの例:
  • /カスタムエディタクラス
     public class AddressEditor extends PropertyEditorSupport {
     @Override
     public String getAsText() {
         return super.getAsText();
     }
    
  • /Springは、データタイプが一致せず、自分で処理できない場合には、この方法で文字列を処理する
     @Override
     public void setAsText(String text) throws IllegalArgumentException {
         String[] str = text.split(",");
         String city = str[0];
         String street = str[1];
         String country = str[2];
         Address add = new Address(city, street, country);
         setValue(add);
     }
    
     }
     //Address 
     public class Address {
     private String city;
     private String street;
     private String country;
     set/get
     .....
     }
    
     //Student 
     public class Student {
     private long id;
     private String name;
     private boolean gender;
     private int age;
     private Address address;
     get/set
     ...
     }
    
  • を呼び出す.
    xmlファイル:
        
        
        
         
        
    
        
        
     
      
        
        
        
        
        
            kunshan,xueyuan,China
        
     
    
    イベントをカスタマイズ
    springではイベントをカスタマイズできます.このイベントはAppliation Conteetタイプのオブジェクトを使って発表できます.イベントが発表された後、すべてのAppliton Listenerのインスタンスがトリガされて、指定方法onAppliation Eventを呼び出して処理します.
    例えば、カスタムイベントクラスRainEvent:
    public class RainEvent extends ApplicationEvent {
    public RainEvent(Object source) {
        super(source);
    }
    }
    
    モニター類RainListener 1
    public class RainListener1 implements ApplicationListener {
    //         ,                           
    //  ,            ,                       。
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof RainEvent) {
            System.out.println("    :" + event.getSource() + "      !");
        }
     }
    
    )モニター類RainListener 2
    public class RainListener2 implements ApplicationListener {
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof RainEvent) {
            System.out.println("  :" + event.getSource() + "        !");
        }
     }
    
    )
    xmlファイル:
    
    
    
    
    メール:
    String path = "com/briup/ioc/event/event.xml";
    ApplicationContext container = new ClassPathXmlApplicationContext(path);
    //    
    container.publishEvent(new RainEvent("   !"));
    
    iocの中のannotation配置
  • @Autowired
  • @AutowiredデフォルトではbyTypeマッチング方式で注入していますが、ビーンのタイプがマッチしていないと異常投げをします.複数のbeanのタイプが一致して成功したら、またbyName方式で
  • を選択してください.
  • @Autowiredコメントは、メンバー変数、set/ger方法、コンストラクタ関数の上に書いてもいいです.
  • @Autowiredは最終的にマッチングが成功しないと(一つも見つからないということに注意してください)異常を投げますが、@Autowired(required=false)に設定されていると、最終的にマッチングが成功しないと例外は出ません.
  • @Autowiredは@Qualfier(「beanName」)と結合して使えば、byNameの効果
  • に達することができます.
  • @Autowiredを使用すると、xmlファイルに以下の構成を追加してから有効になります.
  • @Resource
  • @Resourceの役割は@Autowiredと似ていますが、@Resourceはデフォルトです.まずbynameを使います.もし適当なのが見つからなかったら、bytypeで
  • を注入します.
  • Resourceには二つの属性があり、nameとtypeがあり、name属性を使うとbyNameマッチングが必要であり、type属性を使うとbyTypeマッチングが必要であることを示します.
  • @Resourceを使用すると、xmlファイルに以下の構成を追加してから有効になります.
  • @PostConstructと@Predestroy
  • 単例のクラスはApplication Contectが管理しています.したがって、ac.destory()の場合は、クラスは廃棄されます.
  • @PostConstructコメントを表示した方法は、クラスの実装後に呼び出します.
  • @Predestroyと表示された方法は、クラス廃棄前に呼び出します.
  • @Component
  • この注釈はこのような内容に相当する.
  • @Component注釈は、xmlで定義することなく、beanを直接定義することができる.ただし、2つの定義が同時に存在すると、xmlの定義はクラス中の注解のBeanをカバーして定義されます.
  • @Componentコメントを直接カテゴリに書いてください.
  • @Componentにはbeanの名前を指定するオプションのパラメータがあります.@Component(「boss」)
  • @Componentがパラメータを指定しない場合があります.beanの名前は現在のクラスの小文字
  • です.
  • @Component使用後、xmlファイルにラベルを配置する必要があります.
  • は、springがどのカバンのjava類を検査する必要があるかを示すことができ、@Component注釈を使っているかを確認してください.
  • @Componentで定義されているbeanはデフォルトでは一例モードです.このbeanを非単例にするなら、この@Scope注釈をさらに結合して目標@Scope(prototype)
  • に達することができます.
    @ComponentはSpringのすべてのbeanコンポーネントの一般的な形式であり、@Repository@Service@Controllerは@Componentの細分化であり、より具体的な用例を表すために、それぞれ耐久層、サービス層、表現層に対応している.しかし、少なくともこれまでの4つの注釈の実質的な違いは小さい(ほとんどない)ので、現在のクラスをspring容器の一つとして登録しています.
    注意:component-scanラベルはデフォルトの場合、指定されたパスの下にあるパケット(すべてのサブパケットを含む)を自動スキャンして、@Component@Repository@Service@Controllerラベルの付いたクラスを自動的にspring容器に登録します.Spring中の@Required@Autowired@PostCorstruct@Predestry@Resource@WebServiceRef@EJB@Persistencext@PersistencUnitなどの注釈を付けたクラスに対応する操作が有効になります.
    Springフレームの勉強一日目Springフレームの勉強三日目