Springフレームの勉強(翌日)
11472 ワード
xmlファイルのインポート他のxmlファイルの設定
springフレームに複数のxmlファイルを配置したら、プロファイルを読み込む時にこれらのxmlファイルを全部読み込むことができます.全体のxmlファイルを読むだけでもいいです.この合計のxmlファイルに他のxmlを全部導入します.たとえば:
student.xmlファイル:
xmlファイルにはbeanの構成があり、このbeanに対応するjavaクラスには無参画のコンストラクタが存在します.このとき、spring容器は反射を用いて無参画のコンストラクタを呼び出してインスタンスを作成することができます.
工場クラスによるインスタンス獲得(工場クラスによるインターフェース
スプリングの中のPropertyPlaceholderConfigrer類の使用に注意して、httmlsingleで直接にクラス名を検索すればいいです.
例えば、工場類は指定インターフェースを実現し、インターフェースの三つの抽象的な方法を実現する.
このクラスは工場類ですので、私達が名前connで容器の中で対象を取る時、貰ったのはこの工場類の対象ではなく、この工場類の対象が工場方法を呼び出して帰った対象です.
スプリングの中のPropertyPlaceholderConfigrer類の使用に注意して、httmlsingleで直接にクラス名を検索すればいいです.
例えば、普通の工程類
例えば、静的方法を意味する工場類
Springでは、特定の文字列をオブジェクトに変換するために属性エディタを使用することができます.
カスタム属性エディタの例:/カスタムエディタクラス /Springは、データタイプが一致せず、自分で処理できない場合には、この方法で文字列を処理する を呼び出す.
xmlファイル:
springではイベントをカスタマイズできます.このイベントはAppliation Conteetタイプのオブジェクトを使って発表できます.イベントが発表された後、すべてのAppliton Listenerのインスタンスがトリガされて、指定方法onAppliation Eventを呼び出して処理します.
例えば、カスタムイベントクラスRainEvent:
xmlファイル:@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フレームの勉強三日目
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);
カスタムプロパティエディタProptyEditorSpringでは、特定の文字列をオブジェクトに変換するために属性エディタを使用することができます.
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();
}
@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 1public class RainListener1 implements ApplicationListener {
// ,
// , , 。
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof RainEvent) {
System.out.println(" :" + event.getSource() + " !");
}
}
)モニター類RainListener 2public 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配置
@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フレームの勉強三日目