春
フレームワーク、そのフレームワーク。これは、フィールドアプリケーションシステムと設計の実装の一部における特定の用途のための全体的な構成です。他の人があなたには、いくつかの基本的な作業を行う助け、それがシステムに細部の多くを扱うことができるようにする同等ですが、一般的なフレームワークが成熟し、堅牢です。
春の概要
スプリングは、IOC(DI)とAOPコンテナフレーム
春の優れた特性
① 非侵襲:APIベースのアプリケーション開発の春オブジェクトは、春に依存しないかもしれません
② DI:DI -依存性の注入、制御の反転(IOC)は最も古典を達成します。
③ 指向プログラミング:アスペクト指向プログラミング- AOP
④ コンテナ:それはライフサイクル管理およびアプリケーション・オブジェクトが含まれているため、春はコンテナです
⑤ アセンブリの春実装する簡単なアプリケーションは、に結合される構成要素の複雑な構成を使用します。あなたは春にXMLおよびこれらのオブジェクトのアノテーションを組み合わせて使用することができます。
⑥ ストップ:IOCとAOPに基づいて、オープンソースのフレームワークと様々なエンタープライズアプリケーションの優れたサードパーティ製のライブラリを(実際にはSpringMVC春自身がプレゼンテーション層と春のJDBC永続層を提供)に統合することができます。
春モジュール
IOC和、IN
IOC(制御の反転):反転制御
資源獲得の方向リバース-変更コンテナの主導でますリソースのを押す必要なコンポーネントには、開発者は、リソースのみを受信するための方法を提供する必要があるコンテナオブジェクトを、リソースをされて作成する方法を知っている必要はありません。この動作は、ルックアップの受動的な形として知られています。
DI(依存性注入):依存性注入
そのアセンブリ容器からリソース注入を受けたいくつかの事前定義された方法(例えば:セッターメソッド)を有します。
概要:IOCは思想統制の逆転の一種であり、DIはIOCの具体的な実現です。
IOCコンテナは春に実装します
インポート春のフレームワークのjarパッケージ
プロファイルを作成し、一般的なファイル名:applicationContext.xmlをかbeans.xmlの
- 春は、容器の底にIOCが本質的である一方、IOC、IOCの考え方は、IOCのコンテナに基づいて行わなければならないと思ったオブジェクトファクトリ
1)IOCコンテナBeanによって読み取り前の例では、必要が最初のIOCコンテナ自体をインスタンス化します。
2)スプリングは、2つの実装IOCコンテナを提供します
①たBeanFactory:春の内側基本的にIOCのコンテナのインフラストラクチャは、春には、自身のためで使用するための開発者には利用できません。
②のApplicationContext:たBeanFactoryサブインターフェースは、より高度な機能を提供します。ユーザーのための春、代わりに基礎となるのApplicationContextたBeanFactoryのほぼすべての機会を使用。
メインApplicationContextの実装クラス
ClassPathXmlApplicationContext:クラスパスに対応するプロファイルのXML形式
FileSystemXmlApplicationContext:XML形式で対応するファイルシステムの設定ファイル
Beanは、マルチ・インスタンスが作成された配置、単一の実施形態の初期化時に作成され、また豆で指定することができます。
ConfigurableApplicationContext
サブインターフェイスのApplicationContextであって、いくつかの拡張メソッドがあります
リフレッシュ()とクローズ()は、 ApplicationContextのは、起動、シャットダウン、およびコンテキストを更新する能力を持ってみましょう。だから、ApplicationContextのは、close()メソッドを呼び出すために新しいオブジェクトを必要とするこのインタフェースを閉じます
WebApplicationContext
ルートパスWEBに対して初期化の完了を可能にするWebアプリケーションのために特別に調製され
豆推奨指定して、IOC豆容器から取得するID値とタイプ
// XMLファイルで構成されたidとクラスタイプでオブジェクトを取得し たHelloWorldのhelloWorld = cxt.getBean(。「のhelloWorld」、HelloWorldのクラス)。
豆のタグ
豆タグ:springIOCは豆容器に嵌め込ま
ビーンタグ属性
ID:(に書き込まれた値は一意である必要がある場合、書き込まれなくてもよい)一意のオブジェクトを識別する
クラス:Beanクラス名の完全なアセンブリを
豆サブラベル
プロパティ:割り当てられたオブジェクトの属性
名:属性名の
値:プロパティ値
コンストラクタ、引数:コンストラクタによって割り当て
その豆を割り当て
1.豆()代入法のsetXXX
2.豆コンストラクタ割り当て注:コンストラクタのパラメータの型に互換性がある場合は、割り当てエラーが発生してもよいです。
< 豆ID = "学生" クラス= "com.bean.Student01" > < プロパティ名= "名前" 値= "小明" > </ プロパティ> < コンストラクタ、引数名= "年齢" 値= "18" > < / コンストラクタ、引数> </ 豆>
3. Pの名前空間
< 豆ID = "学生" クラス= "com.bean.Student01" P:名= "小明" P:年齢= "18" > </ 豆>
プロパティの値を使用することができます
1.リテラル
基本データ型とパッケージングクラスは、文字列の他のタイプは、注射の文字通りの方法を取ることができます
リテラルに特殊文字が含まれている場合は、<![CDATA []]>包ままたはエスケープ文字リテラルを使用することができます
2.ヌル値
< プロパティ名= "bookName" > < ヌル/> </ プロパティ>
豆のカスケードプロパティの割り当てを与える3。
カスケードプロパティを設定します元のプロパティの値を変更し、一般的に使用されていません
4.外部には、Beanを宣言した他のBeanを参照してください:この値は使用するための要件を満たすために失敗した時のref属性を
< 豆ID = "学校" クラス= "com.bean.School" > < プロパティ名= "stus" REF = "STU" > </ プロパティ> </ 豆>
豆内部
Beanインスタンスの使用にのみ、特定のプロパティは、それが内部ビーンとして宣言することができる場合。豆内部の<property>または<コンストラクタ、引数>要素に直接宣言、任意の属性名またはIDを設定する必要
豆内部は容器に直接豆の中に入ることができない他の場所で使用することはできません
注入性は、Beanを設定されています
配列とリスト:
あなたはそれがタグ内の要素の数が含まれている、タグを<リスト>を指定する必要があります。これらのタグは、他のビーンた<ref>への参照で指定されたシンプルな一定の値<value>は、指定することができます。<豆>で指定した内蔵豆。<NULL />で指定された空要素。でも、他のコレクションを埋め込むことができます。
リストと同じの配列を定義するには、<リスト>要素を使用します。
方式リストに定義されているようJava.util.Set構成は、<セット>タグが必要です。
< 豆ID = "ショップ" クラス= "com.spring.bean.Shop" > < プロパティ名= "ブックリスト" > <! - 以豆的引用为值的リスト集合- > < リスト> < refの豆= "book01" /> < refの豆= "book02" /> </ リスト> </ プロパティ> </ 豆>
地図
定義<マップ>タグによって、<マップ>タグは、子としての<entry>タグを複数使用してもよいです。各エントリにはキーと値が含まれています。
鍵は、<キー>タグで定義する必要があり、キー値の種類は限定されず、自由に<値>、<参考文献>、<豆>またはその<NULL />要素を指定することができるからです。
< ビーンID = "カップ" クラス= "com.spring.bean.Cup" > < プロパティ名= "ブックマップ" > < 地図> < エントリキー= "ブック" 値-REF = "ブックマップ" > </ エントリ> < エントリ> < キー> < 値> bookKey01 </ 値> </ キー> < REF 豆= "book01" /> </ エントリ> </ マップ> </ プロパティ> </ 豆>
豆の種類のコレクション
他のBean参照に利用可能な外部に構成豆抽出物、の組、リユース
< UTIL:リストID = "schoolList" > < REF 豆= "STU" > </ REF > </ utilに:リスト>
FactoryBeanの
あなたは豆の創造のプロセスに関与するプログラマが必要な場合は、FactoryBeanのを使用
異なるターゲットリターンと豆インゲンの植物工場Beanに返されるクラスの指定したインスタンスではないのgetObjectオブジェクトのメソッドを返します。
Org.springframework.beans.factory.FactoryBeanファクトリーBeanはインタフェースを実装し、3つのメソッドをオーバーライドする必要があります
< ビーンID = "schoolFactory" クラス= "com.factoryBeanImpl.SchoolFactory" > </ 豆>
豆の範囲
可以在<bean>元素的scope属性里设置bean的作用域,以决定这个bean是单实例的还是多实例的。
singleton,是所有bean的默认作用域。注意:工厂bean是通过isSingleton()方法设置是否单例的
当bean的作用域为单例时,Spring会在IOC容器对象创建时就创建bean的对象实例
而当bean的作用域为prototype时,IOC容器在获取bean的实例时创建bean的实例对象
bean的生命周期
在配置bean时,通过init-method和destroy-method 属性为bean指定初始化和销毁方法
Spring IOC容器对bean的生命周期进行管理的过程:
① 通过构造器或工厂方法创建bean实例
② 为bean的属性设置值和对其他bean的引用
③ 调用bean的初始化方法
④ bean可以使用了
⑤ 当容器关闭时,调用bean的销毁方法
<bean id="stu" class="com.bean.Student" init-method="init" destroy-method="destroy"> </bean>
bean的后置处理器
① bean后置处理器允许在调用初始化方法前后对bean进行额外的处理
② bean后置处理器对IOC容器里的所有bean实例逐一处理,而非单一实例。
③ bean后置处理器需要实现接口:org.springframework.beans.factory.config.BeanPostProcessor。
在初始化方法被调用前后,Spring将把每个bean实例分别传递给上述接口的以下两个方法:
●postProcessBeforeInitialization(Object bean, String beanId):初始化之前执行
●postProcessAfterInitialization(Object, String):初始化之后执行
注意
参数bean:IOC容器中创建的对象
参数beanId:IOC容器中创建对象的beanId
引用外部文件
将一部分信息提取到bean配置文件的外部,以properties格式的属性文件保存起来,同时在bean的配置文件中引用properties属性文件中的内容,从而实现一部分属性值在发生变化时仅修改properties属性文件即可。
1. 创建properties属性文件
jdbc.username=root
jdbc.password=12345
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
2. 引入context名称空间
3.指定properties属性文件的位置
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
classpath: 引入当前项目中类路径下的资源文件
classpath*: 引入所项目中类路径下的资源文件
4.从properties属性文件中引入属性值
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" p:username="${jdbc.username}" p:password="${jdbc.password}" p:driverClassName="${jdbc.driverClass}" p:url="${jdbc.url}"> </bean>
自动装配
手动装配:在XML配置文件中以value或ref的方式明确指定属性值都是手动装配。
自动装配:根据指定的装配规则,不需要明确指定,Spring容器会自动将匹配的属性值注入bean中。
注意:自动装配属性的数据类型,只能是[非字面量]值。[字面量]值不能自动装配。即基本数据类型(包装类)+String类型都不可自动装配
装配方式
- 根据类型自动装配:将类型匹配的bean作为属性注入到另一个bean中。当有多个与目标bean类型一致将报错
- 根据名称自动装配:必须将目标bean的名称和属性名设置的完全相同
- 通过构造器自动装配:当bean中存在多个构造器时,此种自动装配方式将会很复杂。不推荐使用。
基于xml,自动装配(不推荐)
在bean中添加autowire="byName|byType"
<bean id="student" class="com.springdemo.autowired.Student" autowire="byType"></bean>
byName:通过类中的属性名与bean中id(IOC容器中的id匹配)。
* 如果数值一致,匹配成功。 如果不一致,装配失败(不会报错,装配null值)
byType:通过类中的属性类型与bean中的class匹配
* 如果一致,匹配成功。
* 如果未找到匹配类型,装配失败(装配null值)
* 如果匹配到多个兼容类型(父子关系:装配失败,结果会报错)
基于注解,自动装配bean
需在XML文档中先添加扫描组件标签,指定需被装配bean的package
<context:component-scan base-package="com.bookStore" use-default-filters="true"></context:component-scan>
base-package:Spring容器会扫描这个基类包及其子包中的所有类。当需要扫描多个包时可以使用逗号分隔。
如果仅希望扫描特定的类而非基包下的所有类,可使用resource-pattern属性过滤特定的类
use-default-filters="true":默认组件扫描(扫描当前base-package下的包及其子包),false:不扫描...
通过子标签控制包含与排除
<context:include-filter>包含扫描,扫描指定匹配规则下的包及其子包
注意:通过将use-default-filters属性设置为false,禁用默认过滤器,然后扫描的就只是include-filter中的规则指定组件了
<context:exclude-filter>排除扫描,子节点表示要排除在外的目标类
注意:将use-default-filters属性设置为true或默认
过滤表达式,指定类型
类别 |
示例 |
说明 |
annotation |
com.XxxAnnotation |
过滤所有标注了XxxAnnotation的类。这个规则根据目标组件是否标注了指定类型的注解进行过滤。 |
assignable |
com.BaseXxx |
过滤所有BaseXxx类的子类。这个规则根据目标组件是否是指定类型的子类的方式进行过滤。 |
aspectj |
com.*Service+ |
所有类名是以Service结束的,或这样的类的子类。这个规则根据AspectJ表达式进行过滤。 |
regex |
com\.anno\.* |
所有com.anno包下的类。这个规则根据正则表达式匹配到的类名进行过滤。 |
custom |
com.XxxTypeFilter |
使用XxxTypeFilter类通过编码的方式自定义过滤规则。该类必须实现org.springframework.core.type.filter.TypeFilter接口 |
4个注解:
1) 普通组件:@Component
2) 表述层控制器组件:@Controller
3) 业务逻辑层组件:@Service
4) 持久化层组件:@Repository
组件命名规则
①默认情况:使用组件的简单类名首字母小写作为bean的id
②使用组件注解的value属性指定bean的id: @Component(value="指定id名")
自动装配bean中的属性
实现原理
在指定要扫描的包时,<context:component-scan> 元素会自动注册一个bean的后置处 理器:AutowiredAnnotationBeanPostProcessor的实例。该后置处理器可以自动装配标记 了@Autowired、@Resource或@Inject注解的属性。
@Autowired
注入方式:既不是set注入,也不是构造注入。本质:是通过反射注入。
自动装配规则
优先使用byType进行装配,如果能唯一匹配,则装配成功。
如果匹配到多个兼容类型的bean,再照byName方式匹配(进行唯一筛选)
如果通过byName唯一确定bean,则装配成功,否则装配失败。
构造器、普通字段(即使是非public)、一切具有参数的方法都可以使用@Autowired注解
若某一属性允许不被装配,可以设置@Autowired注解的required属性为 false
required:默认值是true,必须装配该bean
required值为false时,如果IOC容器中存在该bean,则装配。如果没有,则不装配。
@Autowired注解也可以应用在数组类型的属性上
@Autowired注解也可以应用在集合属性上,此时Spring读取该集合的类型信息,然后自动装配所有与之兼容的bean。
@Autowired注解用在java.util.Map上时,若该Map的键值为String,那么 Spring将自动装配与值类型兼容的bean作为值,并以bean的id值作为键。
@Qualifier
必要时,可以组合使用@Qualifier(value="userDaoMyBatisImpl")注解指定beanId名
Spring甚至允许在方法形参上标注@Qualifiter注解以指定注入bean的名称。