봄이란
Spring은 빈을 생성하고 ioc, aop 및 기타 기술 포인트를 포함한 객체를 관리하기위한 프레임 워크입니다.
봄 스타트 업 수업
1. @Configuration 수단은 상기 클래스를 시작합니다.
2. @componentScan ( "패키지 경로") 클래스를 검색하는 클래스로 클래스 파일을 생성하는 BeanDefinition의 모든 경로를 지정한다.
3. @Import 스캐닝 외에도 import를 통해 beanDefinition을 가져올 수도 있습니다.
콩이란
Spring은 자동 의존성 주입을 생성하고 구현하며 속성을 채우는 객체는 빈입니다.
빈 의존성 주입 타이밍
의존성 주입 과정은 사용자가 처음으로 IoC 컨테이너에서 Bean을 요청할
때 트리거 됩니다 .lazy-init = true가 설정되면 첫 번째 getBean이 설정되고 lazy-init = false가 설정 될 때 Bean이 초기화됩니다. 컨테이너가 시작될 때 직접 초기화됩니다 (싱글 톤 빈).
객체와 빈 생성의 차이점
Spring Bean은 Spring에 의해 생성 된 객체로, 자동으로 의존성을 주입하고 속성을 채 웁니다. 예를
들어 자동 조립 속성 사용자가 직접 존재 합니다.
@component
class person { @Autowired User user; // Autowired will 유형에 따라 또는 Bean 이름에 따라 조립 } 그러면 스프링 컨텍스트 컨테이너에 의해 초기화 된 Bean 사람의 사용자 속성이 자동으로 주입됩니다. 새 개체 사람을 사용하면이 Java 개체의 사용자는 null입니다.
Spring Bean 생성 == Bean 수명주기
1. Spring이 applicationContext를 시작하고 componentScan에 의해 주석이 달린 클래스 클래스를 스캔합니다
. 1. 클래스의 클래스 파일, BeanDefinition을 생성하고,
BeanFactory의 속성 인 BeanDefinitionMap (concurrentHashMap)을 추가합니다. BeanDefinitionMap <beanName, beanDefinition object>
2. 모든 클래스와 폼을 스캔합니다. beanFactory 객체 (beanFactory의 BeanDefinitionMap이 완전히로드 됨)
3. BeanDefinitinon을 처리 할 수있는 beanFactoryPostProcesssor 포스트 프로세서를 호출합니다
(프로그래머가 beanFactoryPostProcesssor 메소드를 구현하고 BeanDefinitinon을 수정할 수 있음)
. 4. beanFactory.getBean () 메소드
beanFactory를 인스턴스화하고 생성합니다 . getBean () 메소드를 사용하여 Bean을 가져올 수없는 경우 Bean
5 를 생성합니다 . beanPostProcessor, Bean 포스트 프로세서
는
Bean (autowirePostProcessor)에서 @Autowired 주석을 채우고, Bean Aop을 구현하고, 동적 프록시 클래스
6을 생성 합니다. 싱글 톤 풀(ConcurrentHashMap <beanName, object address>)
7. getBean () 메소드 에 의해 bean을 호출하여 beanDefinition을 생성하고이를 beanDefinitionMap으로 어셈블하고 beanFactory에 배치 할 수 있습니다.
FactoryBean 인터페이스
Custom bean
bean 클래스는 FactoryBean 인터페이스를 구현하고 getObject 메소드를 재정
의하여이 bean 클래스의 객체를 사용자 정의합니다. 예를 들어 다음 bean은 FactoryBean 인터페이스를 구현하고 proxy.newProxyInstance 메소드를 사용하여 동적 프록시 클래스를 생성합니다.
다양한 Aware 콜백 메커니즘
Spring이 속성을 채운 후 인터페이스를 구현하면 인터페이스의 메서드를 다시 호출하여 자체 속성을
가져옵니다 .Spring은 Bean 속성에서 beanName을 어떻게 가져 옵니까?
beanNameAware
Spring으로 현재 beanFactory를 얻는 방법은 무엇입니까? 그림에
표시된
대로 beanFactoryAware 를 사용하십시오 .
beanDefinition이란 무엇인가
beanDefinition 클래스는 생성자, 지연 로딩, 자동 주입 메소드, 속성, 메소드 이름, bean이 다른 bean에 의존하는지 여부, beanClass 등을 포함하여 bean의 일부 속성을 추상화합니다.
IOC 제어 반전, DI 의존성 주입
Inversion of control : 객체 생성 권한은 Spring에서 관리합니다
DI (dependency injection) : Spring에서 객체를 생성하는 과정에서 객체가 의존하는 속성이 클래스에 주입됩니다.
Spring의 IOC 의존성 주입 방법
생성자 주입, 세터 메서드 주입, 주석 주입, 인터페이스 주입
순환 종속성이란 무엇이며 순환 종속성이있는 이유
A 객체의 속성은 B에 종속되고 B 클래스의 속성은 A에 종속됩니다. 속성 설정을 만들 때 완료 할 수있는 방법은 없습니다.
Bean
1 의 수명주기 때문에 beanDefinition을로드하고,
속성이 채워지지 않은 객체 를 생성합니다. 2, 속성을 채우고, 속성을 인식하고,
3, Bean 사후 처리 (예 : Bean aop)를 사용하여 프록시 객체를 생성하고
,이를 싱글 톤 풀에 넣습니다.
3 단계 캐시는 순환 종속성 문제를 해결합니다.
세 번째 레벨 캐시는 currentHashmap입니다
. 1. 첫 번째 레벨 캐시 : 싱글 톤 풀, 빈의 원래 객체 singletonObjects를 저장합니다
. 2. 두 번째 레벨 캐시 : 채워지지 않은 속성, 초기에 노출 된 객체 earlySingletonObjects
3. 세 번째 레벨 캐시 : ( no aop just not used) aop에 사용되는 팩토리 인 SingletonFactories는 실행 후 한 번만 실행되며 프록시 개체가 생성되어 2 단계 캐시에 배치됩니다. 순환 종속성 및 aop가있는 경우 aop이 이후에 실행될 때 프록시 개체는 다시 생성되지 않으며 두 번째 수준 캐시에서 직접 가져옵니다.
2 단계 캐시
A 의 생성은 B에 따라 다르며, 속성 B로 채워지지 않은 A 객체는 2 단계 캐시에 배치됩니다. B 객체가 생성되면 1 단계 캐시를 사용하여 A 개체를 찾은 다음 두 번째 수준 캐시를 찾습니다
. 속성 중 A 개체도 성공적으로 인스턴스화됩니다.
3 단계 캐시
하지만 Bean은 작동하지 않을 수 있습니다. AOP 이후 2 단계 캐시의 객체는 프록시 객체로 원본 객체와 일치하지 않습니다. 이때 문제가 발생
하므로 3 단계 캐시 singletonFactories가 필요합니다! ! ! !
B는 먼저 세 번째 레벨 캐시에서 singletonFactories를 가져옵니다 .SingletonFactories는 프록시 객체를 생성하고 B의 속성을 주입합니다. AOP 주입 된 객체가 원래 객체에서 프록시 객체로 변경되기 때문에 속성 B의 문제를 해결합니다 ~~~ 프록시 객체를 생성합니다. 두 번째 수준에 있습니다. 캐시에
singletonFactories 3 레벨 캐시를 추가하기위한 전제 조건 은 생성자 를 실행하는 것이므로 생성자의 순환 종속성을 해결할 수 없습니다 .
mybatis는 무엇입니까
Mybatis는 데이터베이스 데이터와 Java 개체를 매핑하기위한 프레임 워크입니다. SQL을 수동으로 작성해야하므로 반자동
Hibernate + jpa는 완전 자동 SQL이므로 완전 자동 매핑입니다.
MyBatis의 분석 SQL 및 운영 단계와 원리
1. InputStream이 xml 구성 파일을로드합니다
. 2. sqlSessionFactory를 생성 합니다 .
3. sqlSessionFactory가 sqlSession을 생성하여 연결을 설정합니다
. 4. sqlSession.getMapper가 매퍼 객체를 생성합니다
. 5. 매퍼 호출 방법
5. sqlSession.commit, flush, close
$ {} 동적 SQL 달러-동적
# {} 정적 SQL, xml 파일을 구문 분석 할 때? , jdbc
mybatis의 사전로드 메커니즘과 유사하여 SQL 주입을 방지합니다.
Spring에서 사용되는 디자인 패턴
Factory 모드 : Spring의 BeanFactory는 전달 된 고유 식별자에 따라 Bean 객체를 얻는 단순 팩토리 모드의 구현입니다.
싱글 톤 모드 : 전역 액세스 포인트 BeanFactory를 제공합니다.
프록시 모드 : AOP 기능의 원리는 프록시 모드를 사용합니다 (1 JDK 2. CGLib 바이트 코드 생성 기술 프록시.)
데코레이터 모드 : 의존성 주입은 BeanWrapper 사용을 필요로하고
옵저버 모드 : 스프링의 옵저버 모드는 일반적으로 리스너 구현에 사용됩니다. ApplicationListener와 같은.
전략 모드 : Bean이 인스턴스화 될 때 Bean 인스턴스를 초기화하는 방법 (반사 또는 CGLIB 동적 바이트 코드 생성)이 결정됩니다.
AOP 동적 프록시
1. JDK 동적 프록시 Proxy.InvocationHandler는 프록시 객체를 생성합니다. invoke 메소드를 다시 작성하면 proxy 객체는 invoke 메소드
2를 반영하여 실제 객체를 호출하는 메소드를 구현합니다 . cglib dynamic proxy
동적 프록시와 정적 프록시의 차이점
정적 프록시, 프록시 클래스의 .class 파일은
프로그램이 실행되기 전에 존재 합니다 . 동적 프록시 : 프로그램이 실행될 때 리플렉션을 사용하여 프록시 개체를 동적으로 생성 <재사용 성, 사용 편의성, 중앙 집중식 호출 호출>
CGLIB와 JDK 동적 프록시의 차이점
Jdk는 사용할 인터페이스를 제공해야합니다.
비추 상 클래스가 동적 프록시를 달성 할 수있는 한 cglib는 필요하지 않습니다 .
Spring은 mybatis를 통합하는데 어떤 객체가 자동으로 어셈블됩니까?
그것은되는 프록시 객체 생성 에 의해 MyBatis로는 사용 JDK의 다이내믹 프록시를
mybatis에서 생성 한 Mapper 객체를 Spring 클래스로 자동 어셈블하는 방법
1. ImportBeanDefinitionRegistrar를 구현하기 위해 클래스 A를 생성합니다
. 2. @import (A.class) 주석, mapper 클래스를 beanDefinition으로 가져옵니다.
beanFactory.registerSingleton
1, proxy.newProxyInstance는 프록시 클래스
2, beanFactory.registerSingleton (beanName "", xxx)을 생성
하고 Factorybean을 구현합니다.
서블릿이란?
서블릿은 http 요청을 수신하고 전송하기 위해 웹 서버에서 실행되는 Java 프로그램입니다.
사용 :
1. 서블릿 인터페이스를 구현하고 doGet 및 doPost 메서드를 다시 작성합니다
. 2. 개발 된 Java 클래스를 웹 서버에 배포합니다.
서블릿 수명주기
1. 각 사용자가 서블릿에 접근하면 서블릿의 인스턴스가 생성되고 서블릿은 init 메소드를 실행합니다
2. 각 요청에 대해 서블릿은 서비스 메소드를 호출합니다. 서비스 메소드의 내부 차이에 따라 , 다른 doget 메소드가 요청 됨
3. 서블릿이 서버에서 제거됨 delete delete servlet
MVC 란 무엇입니까?
MVC는 디자인 패턴, 모델 (모델)-뷰 (뷰)-컨트롤러 (컨트롤러)
jsp (뷰) + 서블릿 (컨트롤러) + 자바빈 (모델)
1이며, 여기서 모델은 dao 계층과 데이터 처리 계층
2,보기를 나타냅니다. jsp
3을 통해 표시됩니다 . 컨트롤러 계층은 서블릿을 통해 요청의 송수신을 추상화합니다.
SPRING MVC의 실행 과정
- (DispatcherServlet) 사용자 요청 가로 채기
springmvc와 springboot의 차이점
Spring은 "엔진"이고,
Spring MVC는 Spring을 기반으로하는 MVC 프레임 워크입니다.
Spring Boot는 Spring4 조건부 등록을 기반으로하는 신속한 개발 통합 패키지 세트입니다.
AOP 란 무엇입니까? 무엇을 위해 사용합니까?
동적 프록시를 사용하여 측면에서 실행해야하는 로직을 짜십시오
목적 :
JWT 인증 차단, 로그 처리, 스프링 트랜잭션 구현 원칙은 모두 AOP입니다.
AOP의 두 가지 실현?
JDK 동적 프록시 및 CGLIB 동적 프록시
어떤 상황에서 에이전트 역할을 할 수 없습니까?
JDK 프록시 모드에는 인터페이스가 있어야합니다.
Spring은 순환 종속성 문제를 어떻게 해결합니까?
스프링 트랜잭션의 전파 특성
required:如果存在事务,就用当前事务,没事务,创建事务
supports:如果存在事务,就用当前事务,没事务,则非事务的执行(但增删改根本存不上)
mandatory:如果存在事务,就用当前事务,没事务,抛出异常
required_new:总是开启一个新的事务(很少用)
not_support:总是非事务的运行,有事务也是非事务运行
never:如果有一个事务,则抛出异常
nested:如果一个活动的事务存在
springMVC 프로세스 :
(1) : 사용자 요청이 DispatcherServlet으로 전송되고 DispatcherServlet이 HandlerMapping 프로세서 매퍼를 호출합니다.
(2) : HandlerMapping은 xml 또는 주석에 따라 해당 프로세서를 찾고 프로세서 객체를 생성하여 DispatcherServlet에 반환합니다.
(3) : DispatcherServlet이 해당 HandlerAdapter를 호출합니다.
(4) : HandlerAdapter는 특정 프로세서를 호출하여 적응 후 요청을 처리하고 ModelAndView를 생성하여 DispatcherServlet에 반환합니다.
(5) : DispatcherServlet은 ModelAndView를 ViewReslover에 전달하여 생성 된 View를 구문 분석하고 DispatcherServlet에 반환합니다.
(6) : DispatcherServlet은 View에 따라 뷰를 렌더링합니다.
SpringBoot 자동 구성의 원리
@EnableAutoConfiguration은 META-INF / spring.factories의 구성 파일을 찾습니다 (생성해야하는 빈이 안에 있음)
. 각 스타터에서 spring.factories 파일을 읽습니다.
Spring Boot의 핵심 주석
핵심 주석은 @SpringBootApplication이 다음 세 가지 유형으로 구성된다는 것입니다.
@SpringBootConfiguration : @Configuration 주석을 결합하여 구성 파일의 기능을 실현합니다.
@EnableAutoConfiguration : 자동 구성 기능을 켭니다.
@ComponentScan : Spring 컴포넌트 스캐닝.
Mybatis 1 단계 캐시 및 2 단계 캐시
첫 번째 수준 캐시는 기본적으로 켜져 있으며 끌 수 없습니다.
첫 번째 레벨 캐시는 SqlSession 레벨 캐싱의 원칙을 나타냅니다. 사용되는 데이터 구조는 맵입니다.
두 가지 중간에 커밋 작업 (수정, 추가, 삭제)이있는 경우이 sqlsession의 첫 번째 레벨 캐시 영역은 모두 의 취소 으로 SqlSession을 통해 두 번째 레벨 캐시. 캐시. 매퍼 수준의 캐시입니다. 원칙 : CacheExecutor를 통해 구현됩니다. CacheExecutor는 실제로 Executor의 프록시 객체입니다.
전통적인 JDBC 개발의 문제점
1. 데이터베이스 연결 개체의 빈번한 생성 및 해제로 인해 시스템 리소스가 쉽게 낭비 될 수 있습니다.
Hibernate와 JPA의 단점
규칙에 따라 SQL 문을 생성 할 수 있지만 다 대일 및 일대 다 관계의 구성이 더 까다 롭고 복잡한 SQL을 작성하기가 쉽지 않습니다.
Mybatis의 Xml 매핑 파일과 Mybatis의 내부 데이터 구조 간의 매핑은 어떻게 매핑됩니까?
requestMap
태그는 ResultMap 객체로 구문 분석되고
, 및 태그는 각각 MappedStatement 객체로 구문 분석됩니다.
동적 SQL은 어떤 레이블을 사용합니까?
foreach, 트림
고유 ID 자동 증가 기본 키에 사용되는 레이블
선택 키
Mybatis는 페이징을 어떻게 수행합니까? 페이징 플러그인의 원리는 무엇입니까?
페이징 플러그인을 통해 SQL을 메모리에서 가로 채고 제한 문을 추가하고 물리적 페이징을 수행합니다.
Mybatis에서 #와 $의 차이점
# 들어오는 데이터를 문자열로 취급하고 자동으로 들어오는 데이터에 큰 따옴표를 추가합니다.
$ 들어오는 데이터를 직접 표시하고 SQL에서 생성
SQL 주입을 방지하는 방법 또는 1 = 1
#Method는 SQL 주입을 크게 방지 할 수 있습니다.
Mybatis 사용시 DAO (Mapper) 인터페이스 호출시 SQL 호출 방법
매퍼 인터페이스, 매퍼 인터페이스 구현 클래스, mapper.xml 파일
. 매퍼 인터페이스 의 전체 클래스 이름은 .xml 매핑 파일의 네임 스페이스 값입니다.
인터페이스의 메서드 이름은 매핑에서 MappedStatement의 id 값입니다. 인터페이스 메소드의 매개 변수는 SQL에 전달 된 매개 변수입니다.
Dao 인터페이스의 작동 원리는 JDK 동적 프록시입니다. Mybatis는 JDK 동적 프록시를 사용하여 Mybatis가 실행될 때 Dao 인터페이스에 대한 프록시 프록시 객체를 생성합니다. 프록시 객체 프록시는 인터페이스 메서드를 가로 채서 다음으로 표시되는 SQL을 실행합니다. 대신 MappedStatement를 사용한 다음 SQL 실행 결과를 반환합니다.
Mybatis의 Xml 매핑 파일에서 다른 Xml 매핑 파일에 대해 ID를 반복 할 수 있습니까?
다른 Xml 매핑 파일의 경우 네임 스페이스가 구성되어 있으면 ID를 반복 할 수 있습니다 .
Mybatis의 기본 및 보조 캐시
봄 구름
등록 센터 Eureka,로드 밸런서 리본, 클라이언트 호출 도구 Rest and Feign, 분산 구성 센터 Config, 서비스 보호 Hystrix, 게이트웨이 Zuul 게이트웨이, 서비스 링크 Zipkin, 메시지 버스 버스 등
유레카 서비스 등록 센터, 클라이언트와 서버 두 부분이 있습니다.
유레카 클라이언트 :이 서비스의 정보를 유레카 서버에 등록하는 역할을합니다
. 유레카 서버 : 등록 센터, 각 서비스의 머신 및 포트 번호를 저장하는 레지스트리가 있습니다.
가짜 서비스 소비자 REST 스타일 캡슐화, GRPC RPC 호출
을 달성하기 위해 @FeignClient 주석을 사용하여 다양한 마이크로 서비스 간
호출
hystrix 서비스를 위한 퓨즈
로드 밸런싱 : ribbon, nginx
Hystrix 원리 (조사 예정)
자체 스레드 풀을 유지하여 스레드 풀이 임계 값에 도달하면 서비스 저하가 시작되고 폴백 기본값이 반환됩니다.
Hystrix 회로 차단기가 필요한 이유
눈사태를 방지하고, 리소스를 적시에 해제하고, 시스템에서 더 많은 계단식 오류를 방지하고, 단일 종속성의 오류가 전체 애플리케이션에 영향을 미치지 않도록 오류와 지연을 격리합니다.
.LINUX 서버 운영 방법
ssh 서버를 설치하려면 Linux 서버에 의존해야합니다. 일반적으로이 ssh 서비스의 포트는 22이고
sftp 서버를 설치하려면 Linux 서버에 의존해야합니다. 일반적으로이 sftp 서비스의 포트는 25입니다. .
ssh 클라이언트를 사용하여 Linux 서버에 연결하고 명령을 통해 Linux 서버를 운영합니다
.sftp 클라이언트를 사용하여 sftp 서버에 연결하여 파일 업로드 및 다운로드 (설치 패키지, 수정 된 파일 업로드)
LINUX 일반적으로 사용되는 명령
Pwd 현재 경로 가져 오기
Su 사용자 전환
Ll 현재 디렉터리의 파일 및 디렉터리
보기 Tail View 파일
Rm –rf 파일 삭제
Vi 파일 수정
Mv 파일 또는 폴더 이동 / 이름 바꾸기
Mkdir 폴더 만들기
Rm –f 폴더 삭제
Tar Pack / unzip
Grep 찾기 원하는 정보