前回の記事でSpring IOCとDIの学習知識を組み合わせた後、私は新たな闘いを始めました。この問題の内容は主にSpringファクトリーのいくつかの高度な機能に焦点を当てています。また、次のAOP研究の前提条件と見なすこともできます。設定して整理し、あまり言わないで、行こう!
前回の記事では、Spring Beanというキーワードについて触れ、その形成プロセスについても簡単にまとめましたが、これ以上の詳細な調査は行っていません。SpringBeanの価値について見てみましょう。探索についてはどうですか?
前の記事で、Javaオブジェクトに基づくSpring Beanを紹介したことを思い出してください。
上の図からわかるように、BeanもJavaオブジェクトですが、Javaオブジェクトなので、ライフサイクルも必要ですか?ライフサイクルがあるため、次のような多くの問題があります。
Beanのライフサイクルは何ですか?
Beanのライフサイクルは- プロセスである - 豆、生存、プロセスからなる3つの相の崩壊によって作成されます
なぜBeanのライフサイクルを理解するのですか?
実際の開発では、多くの場合、Beanを2回処理して拡張する必要があります。この状況の前提条件は、Beanに関する十分な知識と熟練を持っていることです。
学習前の質問を解決したら、直接テキストに移動します
Beanの作成:
デフォルトでは、Springはファクトリを作成するときに、提供する構成ファイルの<bean />タグのid値に従って、対応するBeanも作成します
Beanの初期化:
SpringファクトリーはBeanを作成した後、対応する初期化メソッドを呼び出して初期化します。
注意:
1.初期化メソッドは、必要に応じてプログラマーが設計および提供します
2.初期化メソッドは、プログラマではなくSpringファクトリによって呼び出されます
Beanの初期化のために、SpringはインターフェースInitializingBeanを提供します。このインターフェースでは、afterPropertiesSet()メソッドが1つだけあります。つまり、このインターフェースを実装するすべての実装クラスは、afterPropertiesSet()メソッドを実行してBeanを初期化する必要があります。
public interface InitializingBean {
/**
* Invoked by the containing {@code BeanFactory} after it has set all bean properties
//在设置所有bean属性后调用————也就是DI之后,进行调用
* and satisfied {@link BeanFactoryAware}, {@code ApplicationContextAware} etc.
* <p>This method allows the bean instance to perform validation of its overall
* configuration and final initialization when all bean properties have been set.
此方法允许bean实例对其整个bean实例执行验证,以便在设置了所有bean属性后对其总体配置和最终初始化进行验证
* @throws Exception in the event of misconfiguration (such as failure to set an
* essential property) or if initialization fails for any other reason
*/
void afterPropertiesSet() throws Exception;
}
Springは、システムの初期化に加えて、カスタム初期化関数も提供します
ステップ分析
1.在类中定义一个自定义初始化的方法init()
2.在xml中相应bean标签中添加————init-method="init",并指定我们要使用的初始化方法
3.获取类的实例对象
1。
2.
3。
ここに問題があります!!!!
Beanを初期化するには2つの方法があるため、BeanがInitializingBeanインターフェースを実装し、それにカスタム初期化メソッドを提供する場合、どちらの順序が最初に来るのでしょうか。
答えはこんな感じ!
1. InitializingBean ————> 2.カスタム初期化メソッド
豆の破壊:
Beanを破棄する前に、IOストリームを閉じるか、接続ドライバーを閉じて直接閉じるように、SpringはBean自体の破棄メソッドを呼び出して破棄操作を完了します。すべてのBeanを破棄する場合は、Springファクトリを直接閉じます。 OK!
さて、私たちはBeanについて少しウォームアップするためにここにいます、そして素晴らしいコンテンツは続きます......
Springの実際の開発アイデアを挿入する
実際の開発では、パラメーターの変更が必要になることが多いいくつかの変数(データソースの構成など)を使用します。現時点では、コードを1つずつ変更すると、多くの作業が必要になるだけでなく、カップリング反応も多すぎるため、現時点ではよく使用しますこれらのパラメーターを小さな構成ファイルに入れることを選択します。変更する必要がある場合は、構成ファイルの内容を変更するだけで済みます——————特定の構成のBaidu
日常の開発では、上記の断片的な知識ポイントに加えて、時間形式、Intergerへの文字列割り当て、プログラマー定義の型変換への変換など、いくつかの形式と型の要件もあります。 、ここでカスタム時間コンバーターを実装します
自定义时间类型转换器步骤:
1.编写自定义时间类型转换器
2.将自定义的转换器注册到Spring中
3.由Spring调用我们自定义的时间类型转换
1.カスタムの時間型コンバーターを作成する
package com.xiaozhao.spring.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author : Carson-Zhao
* @date : 2020/9/5 17:03
*/
public class MyDateConverter implements Converter<String, Date> {
#实现Converter接口,重写convert方法,返回的数据为对应类型属性的值
/**
* String——>为需要转换原类型
* Date————>为最终转换的类型
*
* @param source 传入的数据
* @return
*/
@Override
public Date convert(String source) {
Date date = null;
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
date = dateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
2.カスタムコンバーターをSpringに登録する
<bean id="myDateConverter" class="com.xiaozhao.spring.config.MyDateConverter"/>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters" ref="myDateConverter"/>
</bean>
3.システムがカスタムタイプコンバーターを呼び出す
カスタムタイプコンバーターが有効になっているかどうかを確認するために、日付型の誕生日属性をユーザーに追加しました。次に、文字列型のデータを渡して誕生日に割り当てる必要があります
次に、結果を見てください
百科事典:Springのデフォルトの日付型コンバーターでサポートされている形式は次のとおりです:2020/09/05形式はサポートされていません:20-09-05
総括する:
このメモは少し面倒で、内容はあまり関連性がありません。これらは、AOPを学習するための事前知識と見なすことができます。考え方が明確である限り、それはまったく問題ないと思います。これらの小さな知識は、まだ日常生活で非常に一般的です。それが出てこない場合は、原理がわからないと不快になります。
次の記事は正式にAOPの研究に入ります。私は個人的に動的プロキシのアイデアは至る所にあると感じています。それはたまたま私たちのSpring AOPに表示されます。JDKでもCglibのプロキシモードでも、すべてのプログラマーが噛む価値がありますゆっくりと、この記事はウォームアップと見なすことができるSpring Bean関連のライフサイクルを少し示します
最後に、好きな文章を書いてください:
素晴らしい人はだれでも苦労しますが、SBのように固執する限り、あなたは素晴らしい人になります!