Spring]インフラストラクチャ金英漢spring入門後記


ポートフォリオを作成する際、Java、Spring環境を体験したことがありますが、経験は豊富ですか?開発者がjava spring開発環境を説明する講座を聞くために、基礎版の金英漢spring入門編を聞きました.
インフラストラクチャスプリング入門ショートカット

開発環境の構成


java 11, Spring Boot, Gradle
Thymeleaf
h2 DataBase
スプリングプロジェクトを作成する前に、Spring Initializrに接続し、必要な環境を構成してからダウンロードして使用します.

Spring Initializr


Webサイトにログインすると、作成するアイテムに応じて、メタデータ、パッケージ形式、Javaバージョン、Dependencyなどを具体的に設定できます.
何度かクリックして本当に気持ちよかったです^^

テストケース、テストコード


どの機能が正常に動作しているかをテストするために、テスト例を作成しました.テストに使用するクラス名にはルールはありませんが、例では、テストするクラス名と同じクラス名にTestを付けたクラスを作成します.
例)MemberServices->MemberServiceTest

特長


  • JUnitというフレームワークを使用してテストを行います.
    これらの機能をmainメソッドで実行するか、Webアプリケーションのコントローラで実行することで、繰り返し実行が困難で時間がかかるという欠点を解決できます.

  • テストコードには独立性があるはずです.
    テストの順序に依存している場合は、次のテストに影響を与える可能性があります.

  • @BeforeEach, @AfterEach
    各テストメソッドの実行前と実行後に、次のメソッドを実行してテストを支援します.

  • テスト方法の名前はハングルで大丈夫です.
  • @BeforeEach
    //테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하며 의존관계도 새로 맺어준다.
    public void beforeEach(){
       memberRepository = new MemoryMemberRepository();
       memberService = new MemberService(memberRepository);
    }
    @AfterEach
    public void afterEach(){
       memberRepository.clearStore();
    }
    
    @Test
    public void 회원가입() throws Exception {
    
    }
    

    スプリングシートに関連


    コントローラ、サービス、レコードライブラリを作成および使用する前に、スプリングビンと依存関係を確立します.

    @Autowired


    スプリングコンテナにスプリングに関連付けられたオブジェクトを見つけて配置します.
    このように外部にオブジェクト依存関係を挿入することを依存注入,依存注入と呼ぶ.
    コンストラクション関数が1つあれば@Autowiredを省略できます.
    private final MemberService memberService;
    
    @Autowired
    public MemberController(MemberService memberService) {
       this.memberService = memberService;
    }
          

    登録スプリング


  • スキャン構成部品(実際の作業でよく使用される)
    @Component Anotationは、自動的にスプリング空席として登録されます.
    @Componentを含むプレゼンテーションも自動登録されます.
    (@Controller, @Service ,@Repository)

  • 自動関連設定javaコードを使用してスプリング空席を直接登録する
    未定型の場合、または状況に応じてインプリメンテーションクラスを変更する必要がある場合は、設定によってスプリング空席として登録します.
  • @Configuration
    public class SpringConfig {
    
      @Bean
      public MemberService memberService() {
        return new MemberService(memberRepository());
      }
    
      @Bean
      public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
      }
    
    }

    h2 DataBase


    ローカル開発で使いやすいh 2 DataBaseを使用して、インストール、フィーチャー設定を別の位置に整理しています.
    h 2 DataBaseショートカット

    JPA


    JPAは、既存の重複コードと基本的なSQLをJPAから直接生成して実行することができ、開発効率を大幅に向上させることができます.
    開発の過程でMybatisでSQL文を1つずつマッピングして、JPAで実現すると聞いて、本当に驚きました.しっかり勉強すれば、開発が便利になるはずです.

    build.勾配の設定


    内部にはjdbc関連ライブラリが含まれています.
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    application.属性の設定

    #JPA가 생성하는 SQL을 출력
    spring.jpa.show-sql=true
    
    #테이블을 자동으로 생성: none, create
    spring.jpa.hibernate.ddl-auto=none

    JPAエンティティのマッピング


    @Entityマッピング、getter、setter.
    @Entity
    public class Member {
    
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    
     private Long id;
     private String name;
     
     //getter, setter
    }

    JPA会員庫


    JPAは、オブジェクトの状態が永続的な状態である基準に従って、Hibernateによってオブジェクトを管理する.意味がわからないのでスキップしてから探してみましょう
    public class JpaMemberRepository implements MemberRepository {
    
      //EntityManager를 추가해준다.
      private final EntityManager em;
    
      public JpaMemberRepository(EntityManager em) {
            this.em = em;
      }
    
      public Member save(Member member) {
            em.persist(member);
            return member;
      }  
    
    }

    サービス・レベルへのトランザクションの追加


    JPAによるすべてのデータ変更は、トランザクションで実行する必要があります.
    スプリングは、クラスメソッドの実行時にトランザクションを開始し、メソッドが正常に終了したときにトランザクションをコミットします.実行時に異常が発生した場合は、ロールバックします.
    import org.springframework.transaction.annotation.Transactional
    
    //서비스는 비지니스에 의존적 설계
    @Transactional
    public class MemberService {
    
    }

    スプリング設定の変更


    スプリング設定を変更してスプリングデータJPA会員ライブラリを使用します.
    @Configuration
    public class SpringConfig {
    
      private final EntityManager em;
      
      public SpringConfig(DataSource dataSource, EntityManager em) {
           this.dataSource = dataSource;
           this.em = em;
      }
    
      @Bean
      public MemberRepository memberRepository() {         
           return new JpaMemberRepository(em);
      }
    }

    AOP(Aspect Oriented Programming)


    共通の関心事項と肝心な技術事項を別々に実施する.
    AOPを適用すると、コア事項、共通事項の間でメンテナンスを行うことができます.変更が必要な場合は、このロジックを変更するだけです.
    例)測定時間AOP:測定時間の論理をすべての方法に追加する.

    AOPを適用する前に


    サービスには、すべての方法に対して時間測定ロジックが個別に追加されています.
    //공통 로직 내용
    long start = System.currentTimeMillis();
    	try{
        	//구현해야 하는 서비스
    		validateDuplicateMember(member); //중복 회원 검증
    		memberRepository.save(member);
    		return member.getId();
    	}finally {
       		//공통 로직 내용
    		long finish = System.currentTimeMillis();
            long timeMs = finish - start;
    		System.out.println("join = " + timeMs + "ms");
    }

    AOP適用後


    共通の関心事項を適用する範囲(パッケージやサービスなど)を書きます.
    //hello hellospring 아래에 있는 모든 로직 체크
    @Around(("execution(* hello.hellospring..*(..))"))
    共通の関心事項を書く.
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable{
            long start = System.currentTimeMillis();
            System.out.println("START: " + joinPoint.toString());
            try{
                return joinPoint.proceed();
            }finally{
                long finish = System.currentTimeMillis();
                long timeMs = finish - start;
                System.out.println("END:"+joinPoint.toString() +" " + timeMs + "ms");
             }
     }
    実行画面
    hellospringの下のすべての方法が実行されました.

    の最後の部分


    レッスン内容を聞いて、コントローラー、サービス、Repository、Configなどの各キャラクターが明らかに分離して開発されている環境を見てよかったし、入門コースもあまり深くも浅くもなく、文法やJPA、AOP、テストコードなどに深く入り込んだときに開発がどれだけ便利になるか期待できます.
    これはとても充実した授業です.金英漢開発者愛してる
    とにかく、続けて聞きましょう.^
    インフラストラクチャスプリング入門ショートカット