春の学習ノート(全部)

春のコンセプト

クラスとクラス間の管理は、開発者がオブジェクトを作成し、オブジェクト間の関係を管理するのに役立ちます。

スプリングコアテクノロジーioc、aop モジュールとクラス間の分離を実現できます。


Spring の最初のコア関数 IOC

IOC (Inversion of Control): Inversion of Controlは理論、概念、思想です。
説明: オブジェクトの作成、割り当て、および管理はすべて、コードの外側のコンテナーによって実装されます。つまり、オブジェクトの作成は他の外部リソースによって完了します。

コントロール: オブジェクトを作成し、オブジェクトに属性を割り当て、オブジェクト間の関係を管理します。
反転: 元の開発者の管理権限とオブジェクト作成権限を、コード外のコンテナ実装に移します。オブジェクトは開発者ではなくコンテナーによって管理されます。オブジェクトを作成し、
プロパティに値を割り当てます。

順方向ローテーション: 開発者は新しいコンストラクターを使用してコード内にオブジェクトを作成し、そのオブジェクトをアクティブに管理します。

       public static void main(String args[]){
    
    
            Student student = new Student(); // 在代码中, 创建对象。--正转。

		 }

コンテナ:サーバーソフトウェア、フレームワーク(スプリング)です

ioc を使用する理由: コードの変更を減らし、さまざまな機能を実現することが目的です。デカップリングを実現します。

java中创建对象有哪些方式:
  1. 构造方法 , new Student()
  2. 反射
  3. 序列化
  4. 克隆
  5. ioc :容器创建对象
  6. 动态代理
ioc的体现: 
   servlet  1: 创建类继承HttpServelt 
	         2:  在web.xml 注册servlet , 使用<servlet-name> myservlet </servlet-name>
				                                 <servelt-class>com.bjpwernode.controller.MyServlet1</servlet-class>

            3. 没有创建 Servlet对象, 没有 MyServlet myservlet = new MyServlet()

				4. ServletTomcat服务器它能你创建的。 Tomcat也称为容器
				   Tomcat作为容器:里面存放的有Servlet对象, ListenerFilter对象

IOC の技術的実現:

DI は、ioc DI (Dependency Injection) の技術的な実装です。Dependency
Injection では、プログラムで使用するオブジェクトの名前を指定するだけで、コンテナ
内でオブジェクトがどのように作成、割り当て、検索されるかが決まります。すべてコンテナ内に実装されています。

Spring は di を使用して ioc の機能を実装し、Spring の最下層はリフレクション機構を使用してオブジェクトを作成します。

Springはオブジェクトを管理し、プロパティに値を割り当てるコンテナで、最下層はリフレクション作成オブジェクトです

spring-conetxt と spring-webmvc は、 spring の
spring-context の2 つのモジュールです。ioc 関数用であり、オブジェクトを作成します。
spring-webmvc は Web 開発に使用され、サーブレットのアップグレードです。
spring-contextでオブジェクトを作成する機能はspring-webmvcでも利用されています。

junit : 単体テスト、テスト メソッドに使用されるツール クラス ライブラリ。
ユニット:メソッドを指定します。クラス内には多数のメソッドがあり、メソッドをユニットと呼びます。

単体テスト
1 を使用します。junit 依存関係を追加する必要があります。

junit
junit
4.11
テスト

2. テスト用のクラスを作成します。テスト
クラスと呼ばれるクラスが src/test/java ディレクトリに作成されます。

3. テストメソッドを作成する

1)public 方法
 2)没有返回值 void 
 3)方法名称自定义,建议名称是test + 你要测试方法名称
 4)方法没有参数
 5)方法的上面加入 @Test ,这样的方法是可以单独执行的。 不用使用main方法。

  1. 構成上の複数の利点
    1. 各ファイルのサイズは 1 つのファイルよりもはるかに小さくなります。高効率
    2. 複数人での競争による衝突を回避します。

プロジェクトに複数のモジュール (関連する機能がまとめられている) がある場合、モジュールごとに 1 つの構成ファイルが必要です。
生徒出席モジュール用の 1 つの構成ファイル、Zhang San、
生徒のパフォーマンス用の 1 つの構成ファイル、Li Si

複数のファイルを配布する方法:

  1. 機能モジュールに応じて、モジュールごとに 1 つの設定ファイル
  2. クラスの機能に応じて、データベース関連の設定ファイル、トランザクション機能の設定ファイル、サービス機能の設定ファイルなどがあります。

2. 注釈ベースの di: 注釈を使用して Java オブジェクトの作成と属性の割り当てを完了します。
アノテーションを使用する手順:
1. Maven の依存関係 spring-context を追加します。spring-context を追加すると、間接的に spring-aop 依存関係が追加されます。
アノテーションを使用するには、spring-aop 依存関係を使用する必要があります。

2.在类中加入spring的注解(多个不同功能的注解)

3.在spring的配置文件中,加入一个组件扫描器的标签,说明注解在你的项目中的位置

学習のためのメモ:
1.@Component
2.@Respotory
3.@Service
4.@Controller
5.@Value
6.@Autowired
7.@Resource

ユーザー処理リクエスト:
ユーザーフォーム、パラメータ名、年齢-----サーブレット(受信リクエスト名、年齢)—サービスクラス(処理名、年齢操作)—daoクラス(データベースアクセス)—mysql

================================================= == =============================================== =
第 3 章 aop

1. 動的プロキシ
の実装方法: jdk 動的プロキシ。jdk の Proxy、Method、InvocaitonHanderl を使用してプロキシ オブジェクトを作成します。
jdk 動的プロキシでは、ターゲット クラスがインターフェイスを実装する必要があります。

cglib ダイナミック プロキシ: プロキシ オブジェクトを作成するためのサードパーティ ツール ライブラリ。原則は継承です。ターゲットクラスを継承してサブクラスを作成します。
サブクラスはプロキシ オブジェクトです。ターゲットクラスをfinalにすることはできず、メソッドもfinalにすることはできません。

2. ダイナミックプロキシの機能:
1) 対象クラスのソースコードを変更せずに機能を追加します。
2) コードの重複を削減します。
3) ビジネス ロジック コードに焦点を当てます
。 4) 分離して、ビジネス機能をログ、トランザクションの非ビジネス機能から分離します。

3. Aop: 動的プロキシに基づくアスペクト指向プログラミング。jdk、cglib の 2 つのプロキシ メソッドを使用できます。Aopはダイナミックプロキシの標準化であり、開発者が統一的にダイナミックプロキシを利用できるように
、ダイナミックプロキシの実装手順や実装方法が定義されています。

  1. AOP (Aspect Orient Programming) アスペクト指向プログラミング
    アスペクト: アスペクト、ターゲット クラスに追加される関数がアスペクトです。上記で使用したログと同様、トランザクションは側面です。
    アスペクトの特徴: 一般に、これらは非ビジネスメソッドであり、独立して使用されます。
    方向: 向かい合う、向かい合う。
    プログラミング:プログラミング

oop: オブジェクト指向プログラミング

アスペクト指向プログラミングを理解するにはどうすればよいですか?
1) プロジェクトの機能を分析する際に、その側面を見つける必要がある。
2) アスペクトの実行時間を合理的に配置する(ターゲットメソッドの前またはターゲットメソッドの後)
3) セキュリティアスペクトの適切な実行位置、どのクラス、どのメソッドに拡張機能を追加する

用語:
1) アスペクト: アスペクトとは拡張機能を意味し、ある機能を実現するためのコードの束です。非ビジネス機能、
共通アスペクト機能には、ログ、トランザクション、統計、パラメータ チェック、および権限検証が含まれます。

2) JoinPoint: ビジネス メソッドとアスペクトが接続される接続ポイント。特定のクラスのビジネス メソッドの場合
3) ポイントカット: エントリ ポイントは、複数の接続ポイント メソッドの集合を指します。複数のメソッド
4) ターゲットオブジェクト: どのクラスのメソッドに関数を追加します。このクラスがターゲットオブジェクトです。
5) アドバイス: 通知。通知はアスペクト関数の実行時間を示します。

说一个切面有三个关键的要素:
1)切面的功能代码,切面干什么
2)切面的执行位置,使用Pointcut表示切面执行的位置
3)切面的执行时间,使用Advice表示时间,在目标方法之前,还是目标方法之后。

5.
aop の実装 Aop は仕様、動的標準化、標準的な
aop テクノロジ実装フレームワークです。
1. spring: spring は aop 仕様を内部的に実装し、aop 作業を実行できます。
Spring では主にトランザクション処理で AOP を使用します。
Spring の AOP 実装は、プロジェクト開発ではほとんど使用されません。SpringのAOPは面倒なので。

2. aspectJ: aop 専用のオープンソース フレームワーク。aspectj フレームワークは spring フレームワークに統合されており、aspectj の機能は spring を通じて使用できます。
aspectJ フレームワークは 2 つの方法で aop を実装します。
1. XML 構成ファイルを使用します。グローバル トランザクションを構成します
。 2. アノテーションを使用します。プロジェクト内で aop 関数を実行する必要があります。通常はアノテーションを使用します。aspectj には 5 つのアノテーションがあります。

6.spectj フレームワークの使用法を学びます。
1) アスペクトの実行時間 この実行時間は仕様ではアドバイス (通知、拡張) と呼ばれ、
aspectj フレームワークではアノテーションによって表されます。XML 設定ファイルでタグを使用することもできます
1) @Before
2) @AfterReturning
3) @Around
4) @AfterThrowing
5) @After

2) ポイントカット式を使用して、アスペクトが実行される場所を示します。

	com.service.impl
	com.bjpowrnode.service.impl
	cn.crm.bjpowernode.service


  execution(* *..service.*.*(..))

================================================= == ===================
第 4 章: mybatis フレームワークを Spring と統合し、フレームワークのように使用します。

使用されているテクノロジーは、ioc です。
ioc を使用する理由: ioc はオブジェクトを作成できるため、Mybatis と spring をフレームワークのように統合できます。
mybatis フレームワーク内のオブジェクトは Spring に引き渡して統一的に作成することができ、開発者は Spring からオブジェクトを取得できます。
開発者は同時に 2 つ以上のフレームワークに直面する必要はなく、ただバネに直面するだけで済みます。

mybatis の使用手順、オブジェクト
1. dao インターフェイス StudentDao を定義します。
2. マッパー ファイル StudentDao.xml を定義
します。 3. mybatis メイン設定ファイル mybatis.xml を定義します。
4. dao プロキシ オブジェクト StudentDao を作成します。 dao = SqlSession.getMapper(StudentDao.class) ;

学生のリスト = dao.selectStudents();

dao オブジェクトを使用するには、getMapper() メソッドを使用する必要があります。getMapper
() メソッドの使用方法と必要な条件
1. SqlSession オブジェクトを取得するには、SqlSessionFactory の openSession() メソッドを使用する必要があります。
2. SqlSessionFactory オブジェクトを作成します。mybatisのメイン設定ファイルを読み取ることで、SqlSessionFactoryオブジェクトを作成できます。

SqlSessionFactory オブジェクトが必要です。SqlSession は Factory を使用して取得でき、dao は SqlSession で取得できます。目的は dao オブジェクトを取得することです。ファクトリの作成にはメイン構成ファイルを読み取る必要があります

独立した接続プール クラスを使用して、mybatis がデフォルトで提供する接続プール クラスを置き換え、接続プール クラスを Spring に渡して作成します。

主な設定ファイル:
1. データベース情報

 <environment id="mydev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库的驱动类名-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--连接数据库的url字符串-->
                <property name="url" value="jdbc:mysql://localhost:3306/springdb"/>
                <!--访问数据库的用户名-->
                <property name="username" value="root"/>
                <!--密码-->
                <property name="password" value="123456"/>
            </dataSource>
  1. マッパーファイルの場所
<mappers>
        <mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
        <!--<mapper resource="com/bjpowernode/dao/SchoolDao.xml" />-->
    </mappers>

================================================= == ============
上記の説明を通じて、Spring に次のオブジェクトを作成させる必要があります。
1. Ali の druid 接続プールを使用した、独立した接続プール クラスのオブジェクト
2. SqlSessionFactory オブジェクト
3. daoオブジェクトを作成する

学習する必要があるのは、xml の Bean タグを使用した、上記 3 つのオブジェクトの作成構文です。

接続プール: 複数の接続接続オブジェクトのコレクション、リスト connlist: connList は接続プールです

通常、データベースにアクセスするには Connection を使用します。

Connection conn =DriverManger.getConnection(url,username,password);
Statemenet stmt = conn.createStatement(sql);
stmt.executeQuery();
conn.close();


プログラムの起動時に接続プールを使用していくつかの接続を作成します

Connection c1 = ...
Connection c2 = ...
Connection c3 = ...
List<Connection>  connlist = new ArrayLits();
connList.add(c1);
connList.add(c2);
connList.add(c3);

Connection conn = connList.get(0);
Statemenet stmt = conn.createStatement(sql);
stmt.executeQuery();

使用済みの接続を接続プールに戻します

connList.add(conn);


Connection conn1 = connList.get(1);
Statemenet stmt = conn1.createStatement(sql);
stmt.executeQuery();
把使用过的connection放回到连接池
connList.add(conn1);

================================================= == =================
Spring トランザクション処理
質問に答える
1. トランザクションとは
mysql について話すとき、トランザクションが提案されます。トランザクションは SQL ステートメントのセットを指します。セットには、
挿入、更新、選択、削除などの複数の SQL ステートメントがあります。これらの複数の SQL ステートメントが成功または失敗することを期待します
。これらの SQL ステートメントの実行は一貫しています。 、全体として実行されます。

2. トランザクションの使用を考えるのは、
操作に複数のテーブルの取得、または複数の SQL ステートメントの挿入、更新、削除が含まれる場合です。
私の機能を完了するには、これらのステートメントがすべて成功するか、操作が要件を満たしていることを確認するためにすべて失敗するかを確認する必要があります。

Javaコードでトランザクションを制御するプログラムを書きますが、このときトランザクションをどこに配置すればよいでしょうか?
サービスクラスのビジネスメソッドについて。ビジネスメソッドは複数のdaoメソッドを呼び出し、複数のSQL文を実行するため

3. 通常、JDBC を使用してデータベースにアクセスするか、mybatis がデータベースにアクセスするときのトランザクションの処理方法

 jdbc访问数据库,处理事务:
 Connection conn ; 
 conn.commit(); 
 conn.rollback();
mybatis访问数据库,处理事务:
 SqlSession.commit();
SqlSession.rollback();
hibernate访问数据库,处理事务:
Session.commit(); 
Session.rollback();

4.3 質問のトランザクション処理方法の欠点は何ですか?
1) データベース アクセス技術が異なれば、トランザクションを処理するオブジェクトと方法も異なります。
異なるデータベース アクセス技術におけるトランザクションの使用原理を理解する必要があります。
2) トランザクションをマスターするさまざまなデータベースの処理ロジック。トランザクションをいつコミットするか、いつトランザクションをレビューするか
3) トランザクションを処理する複数の方法。

概要: これは、さまざまなトランザクション処理メカニズム、オブジェクト、メソッドを備えたさまざまなデータベース アクセス テクノロジです。

5. 問題の解決方法
Spring は、統合されたステップを使用してさまざまなデータベース アクセス技術のトランザクション処理を完了できる、トランザクション処理の統合モデルを提供します。

Springのトランザクション処理機構を利用してmybatisのデータベースアクセスのトランザクション処理を完了することができ、
Springのトランザクション処理機構を利用してHibernateのデータベースアクセスのトランザクション処理を完了することができる。

6. トランザクションを処理する方法、
トランザクションを処理するスプリング モデル、および使用する手順はすべて固定されています。トランザクションで使用される情報を Spring に提供するだけです

1) 内部トランザクションはコミットし、トランザクションをロールバックし、ユーザーの代わりにトランザクション マネージャー オブジェクトを使用してコミットを完了します。ロールバック トランザクション マネージャーは、インターフェイスとその多くの実装クラスです

インターフェース:PlatformTransactionManager、トランザクションコミット、ロールバックの重要なメソッドを定義
実装クラス:Springは各データベースアクセス技術に対応したトランザクション処理クラスを作成しています。
Mybatis がデータベースにアクセスします - Spring が DataSourceTransactionManager を作成します
Hibernate がデータベースにアクセスします - Spring が HibernateTransactionManager を作成します

 怎么使用:你需要告诉spring 你用是那种数据库的访问技术,怎么告诉spring呢?
  声明数据库访问技术对于的事务管理器实现类, 在spring的配置文件中使用<bean>声明就可以了
  例如,你要使用mybatis访问数据库,你应该在xml配置文件中
  <bean id=“xxx" class="...DataSourceTransactionManager"> 

2) あなたのビジネスメソッドではどのような種類のトランザクションが必要なのか、必要なトランザクションの種類を示します。
このメソッドで必要なトランザクションについて説明します。
1) トランザクション分離レベル: 4 つの値があります。
DEFAULT: DB のデフォルトのトランザクション分離レベルを使用します。MySql のデフォルトは REPEATABLE_READ、Oracle のデフォルトは READ_COMMITTED です。
➢ READ_UNCOMMITTED: コミットされていない読み取り。同時実行の問題は解決されませんでした。
➢ READ_COMMITTED: 読み取りがコミットされました。ダーティリード、反復不可能なリード、ファントムリードを解決します。
➢ REPEATABLE_READ: 反復可能な読み取り。ダーティ読み取り、反復不能読み取り、およびファントム読み取りを解決します
。 ➢ SERIALIZABLE: シリアル化します。同時実行性の問題はありません。

  2) 事务的超时时间: 表示一个方法最长的执行时间,如果方法执行时超过了时间,事务就回滚。
	  单位是秒, 整数值, 默认是 -1. 

   3)事务的传播行为 : 控制业务方法是不是有事务的, 是什么样的事务的。
	    7个传播行为,表示你的业务方法调用时,事务在方法之间是如果使用的。

		PROPAGATION_REQUIRED
		PROPAGATION_REQUIRES_NEW
		PROPAGATION_SUPPORTS
		以上三个需要掌握的

		PROPAGATION_MANDATORY
		PROPAGATION_NESTED
		PROPAGATION_NEVER
		PROPAGATION_NOT_SUPPORTED

3) トランザクションがトランザクションをコミットし、トランザクションをロールバックする場合
1) ビジネス メソッドが正常に実行され、例外がスローされない場合、メソッドが実行されると、Spring はメソッドの実行後にトランザクションをコミットします。トランザクションマネージャーのコミット

  2)当你的业务方法抛出运行时异常或ERROR, spring执行回滚,调用事务管理器的rollback
     运行时异常的定义: RuntimeException  和他的子类都是运行时异常, 例如NullPointException , NumberFormatException
  
  3) 当你的业务方法抛出非运行时异常, 主要是受查异常时,提交事务
    受查异常:在你写代码中,必须处理的异常。例如IOException, SQLException

春の出来事をまとめます

1. トランザクションを管理するのはトランザクション管理とその実装クラス
2. Spring のトランザクションは統一モデルである
1) 使用するトランザクションマネージャー実装クラスを指定、使用する
2) トランザクション機能に参加する必要があるクラスとメソッドを指定する
3 ) メソッドに必要な分離レベル、伝播動作、およびタイムアウトを指定します。

  你需要告诉spring,你的项目中类信息,方法的名称,方法的事务传播行为。

Spring Framework で提供されるトランザクション処理ソリューション
1. 中小規模のプロジェクト、アノテーション ソリューションに適しています。
Spring Frameworkはビジネスメソッドにトランザクションを追加する機能をaopを利用して実装し、@Transactionalアノテーションを利用してトランザクションを追加します。
@Transactional アノテーションは Spring フレームワーク独自のアノテーションで、パブリック メソッドの上に配置され、現在のメソッドにトランザクションがあることを示します。
アノテーションの属性に値を割り当てて、特定の分離レベル、伝播動作、例外情報などを示すことができます。

@Transactional を使用する手順:
1. トランザクション マネージャー オブジェクトを宣言する必要があります。

2. トランザクション アノテーション ドライバーをオンにし、トランザクションの管理にアノテーションを使用することを Spring フレームワークに伝えます。
Spring は aop メカニズムを使用して、@Transactional が配置されているクラス プロキシ オブジェクトを作成し、メソッドにトランザクション関数を追加します。
Spring はビジネス メソッドにトランザクションを追加します。
ビジネス メソッドが実行される前に、最初にトランザクションを開始し、ビジネス メソッドの後にトランザクションをコミットまたはロールバックし、AOP のサラウンド通知を使用します。

	 @Around("你要增加的事务功能的业务方法名称")
	 Object myAround(){
       开启事务,spring给你开启
		  try{
		     buy(1001,10);
			  spring的事务管理器.commit();
		  }catch(Exception e){
         spring的事务管理器.rollback();
		  }
		 
	 }

3. メソッドの上に @Trancational を追加します


2. 大規模プロジェクトに最適 大量の設定トランザクションを必要とするクラスやメソッドが多いため、クラスやメソッドに必要なトランザクションは、 aspectj フレームワーク関数を使用してSpring 設定ファイルに宣言します。このように、ビジネスメソッドとトランザクション構成は完全に分離されます。

実装手順: すべては XML 構成ファイルに実装されます。
1)aspectj フレームワークを使用するには、依存関係

org.springframework
spring-aspects
5.2.5.RELEASEを追加する必要があります。

2)声明事务管理器对象
 
<bean id="xx" class="DataSourceTransactionManager">


3) 声明方法需要的事务类型(配置方法的事务属性【隔离级别,传播行为,超时】)

4) 配置aop:指定哪些哪类要创建代理。

================================================= == =================================
第 6 章: Web プロジェクトでコンテナ オブジェクトを使用する方法。

1. Javase プロジェクトに main メソッドがあり、実行コードは main メソッドを実行することで、
main
ApplicationContext に作成されたコンテナ オブジェクト ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”); 2.

2. Web プロジェクトは Tomcat サーバー上で実行されています。一緒に Tomcat を起動すると、プロジェクトが実行されます。

要件:
Web プロジェクト内のコンテナー オブジェクトは 1 回だけ作成する必要があり、コンテナー オブジェクトはグローバル スコープの ServletContext に置かれます。

方法:
リスナーを使用してコンテナを作成し、グローバル スコープ オブジェクトの作成時に ServletContext に格納します。

监听器作用:
1)创建容器对象,执行 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
2)把容器对象放入到ServletContext, ServletContext.setAttribute(key,ctx)

监听器可以自己创建,也可以使用框架中提供好的ContextLoaderListener


 private WebApplicationContext context;
 public interface WebApplicationContext extends ApplicationContext


 ApplicationContext:javase项目中使用的容器对象
WebApplicationContext:web项目中的使用的容器对象

把创建的容器对象,放入到全局作用域
 key: WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
       WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
 value:this.context

 servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

Guess you like

Origin blog.csdn.net/m0_46450708/article/details/120852213