spring 의 IoC 와 DI 상세 설명
IOC: 번역 은 반전 을 제어 하 는 것 입 니 다. 대상 의 생 성 권 을 Spring 에서 관리 합 니 다. HelloService 는 스스로 만 들 필요 가 없습니다. Spring 은 만 들 수 있 습 니 다.
DI: 주입 에 의존 합 니 다. 대상 을 만 드 는 과정 에서 대상 이 의존 하 는 속성 을 우리 클래스 에 주입 합 니 다.
우리 가 현재 작성 하고 있 는 클래스 는 다른 속성 이 없습니다. UML 같은 디자인 을 배 웠 다 면 대상 의 몇 가지 관 계 를 대상 으로 합 니 다.
간단하게 책 을 보 내 면 IoC 는 일종 의 사상 같 고 DI 는 행위 이다.
또 다른 설 은 ioc 가 목적 이 고 di 가 수단 이라는 것 이다.ioc 는 클래스 를 생 성 하 는 방식 을 전통 적 인 방식 (new) 에서 반대로 하 는 것 을 말한다. 프로그래머 가 new 를 호출 하지 않 고 클래스 가 필요 할 때 프레임 워 크 에 주입 (di) 하 는 것 은 같은 차원 의 해석 이다.
IoC: 역 제어 (반전 제어):
프로그램 에서 수 동 으로 대상 을 만 드 는 제어 권 을 Spring 프레임 워 크 에 맡 깁 니 다.
Spring 첫 번 째 spring 테스트 프로그램
1. jar 가방 준비
spring-beans-4.1.2.RELEASE.jar spring-core-4.1.2.RELEASE.jar com.springsource.org.apache.commons.logging-
public class HelloSpring {
@Setter // set
private String name;
public void say() {
System.out.println("hello---" + name);
}
}
@Test
// spring
public void test1() throws Exception {
//1
Resource resource = new ClassPathResource("/applicationContext.xml");
//2 spring
BeanFactory bf = new XmlBeanFactory(resource);
//3 srping
HelloSpring hello = bf.getBean("helloSpring", HelloSpring.class);
application. xml 파일 설정
import 요 소 를 사용 하여 다른 프로필 을 가 져 옵 니 다:
import 요소 사용 주의:
1. 기본적으로 classpath 와 경 로 를 찾 습 니 다.2. 파일 의 기본 위 치 를 접두사 로 찾 을 수 있 습 니 다.
①: [classpath:]: 뒤의 파일 은 classpath 경로 부터 찾 습 니 다 (추천).[classloader 의 질문 에 주의 하 십시오.] ②: [file:]: 뒤의 파일 은 파일 시스템 의 경 로 를 사용 하여 찾기 시작 합 니 다.
메모: 프레임 워 크 에서 리 소스 인 터 페 이 스 를 실현 해야만 상기 접두사 식별 자 를 식별 할 수 있 습 니 다.
Spring 테스트
Spring 테스트 환경 준비:
jar 에 의존:
1.spring-test-4.1.2.RELEASE.jar 2.spring-context-4.1.2.RELEASE.jar 3.spring-aop-4.1.2.RELEASE.jar 4.spring-expression-4.1.2.RELEASE.jar
Spring4. x 가 의존 해 야 할 단원 테스트 는 최신 Junit 4.12, Eclipse 가 자체 적 으로 가지 고 있 는 Junit 4.8 이 지원 되 지 않 으 며, Spring4. x 부터 AOP 패키지 의 지원 에 도 의존 해 야 합 니 다.
junit-4.12.jar hamcrest-core-1.3.jar
@RunWith(SpringJUnit4ClassRunner.class) Spring , junit Spring
@ContextConfiguration("classpath:applicationContext.xml"):
public class HelloWorldTest {
@Autowired :
private BeanFactory factory;
@Test
public void testSpringTest() throws Exception {
HelloWorld helloWorld = factory.getBean("springTest", HelloWorld.class);
helloWorld.sayHello();
}
}
@ ContextConfiguration ("classpath: applicationContext. xml") 을 @ ContextConfiguration 에서 기본적으로 찾 는 현재 테스트 클래스 이름 - context. xml 프로필 로 작성 합 니 다. 예 를 들 어 HelloWorld Test - context. xml
봄 용기
BeanFactory: Spring 의 최 하층 인터페이스 로 가장 간단 한 IoC 기능 (bean 생 성 및 관리) 만 제공 합 니 다.
응용 프로그램 에서 일반적으로 BeanFactory 를 사용 하지 않 고 응용 프로그램 Context (응용 상하 문) 를 추천 합 니 다. 이 유 는 다음 과 같 습 니 다.
Spring 이 관리 하 는 구성원 들 은 모두 bean (클래스, 대상, bean 요소) 이 라 고 부른다.
BeanFactory 와 Application Context 의 차이
1. ApplicationContext 는 BeanFactory 를 계승 하여 기본 적 인 IoC 기능 을 가진다.2. 그 밖 에 ApplicationContext 는 다음 과 같은 기능 을 제공 합 니 다.
① 국제 화 를 지원 한다.② 、 메시지 체 제 를 지원 합 니 다.③ 통 일 된 자원 로드 를 지원 합 니 다.④ 、 AOP 기능 지원;
bean 생 성 시기:
1. ApplicationContext 는 불 러 올 때 모든 bean (웹 응용 프로그램 제안) 을 만 듭 니 다. 2. BeanFactory 는 bean 을 가 져 올 때 까지 기 다 려 야 bean (데스크 톱 프로그램) 을 만 들 고 초기 화 를 지연 시 킵 니 다.
// xml bean: .
// bean: .
bean 의 역할 영역, bean 대상 은 얼마나 생존 할 수 있 습 니까?
singleton: , Spring IoC Bean ( scope)
prototype: , Bean , , getBean() , new XxxBean():
request: web , Bean request ,request.setAttribute("xxx") , request Bean
session: web , Bean Session , Session Bean
globalSession: Porlet , session ( ), porlet ,globalSession Session
Struts2 Action prototype , singleton
DI: Dependency Injection: 주입 소개 와 XML 에 의존 하 는 자동 조립 이란 Spring 이 대상 을 만 드 는 과정 에서 대상 을 속성 에 의존 하여 설정 을 통 해 xml 방식 - 자동 조립 (일반적으로 추천 하지 않 음) 을 주입 합 니 다.
:autowire
autowire 속성: spring 이 일정한 방식 으로 적당 한 대상 을 찾 아 DI 를 완성 하도록 합 니 다.
- default: 자동 주입 하지 마 - no: 자동 주입 하지 마 - by Name: 이름 에 따라 주입 (속성 이름 에 따라 spring 에서 bean 찾기) factory. getBean ("속성의 이름") - by Type: 의존 대상 의 유형 에 따라 주입 (factory. getBean (속성의 유형) - constructor: 대상 의 구조 기 위 에 있 는 매개 변수 유형 에 따라 주입
주의:
1. by Name 에 따라 자동 으로 주입 하면 모든 속성 이름과 id 의 이름 이 규범 화 된 명명 방식 을 확보 해 야 합 니 다.2. by Type 에 따라 주입 하면 spring 에서 같은 유형 에 여러 개의 인 스 턴 스 가 있다 면 - > bean 은 유일한 유형 오류 가 아 닙 니 다.
수 동 조립:
속성 주입: 대상 의 setter 방법 으로 의존 하 는 대상 을 주입 합 니 다.
setter 주입 사용: 1, bean 요소 의 하위 요소 설정 사용;1. 간단 한 유형 값, value 할당 을 직접 사용 합 니 다.2. 형식 을 참조 하고 ref 할당 을 사용 합 니 다.3. 집합 유형 은 해당 하 는 집합 유형 요 소 를 직접 사용 하면 됩 니 다.2, spring 은 속성의 setter 방법 으로 값 을 주입 합 니 다.3. 설정 파일 에 설 정 된 값 은 모두 string 입 니 다. spring 은 자동 으로 형식 변환 을 완성 할 수 있 습 니 다. 4. 속성의 설정 값 은 init 방법 이 실행 되 기 전에 완 성 된 5 입 니 다. spring 의 테스트 를 개선 하고 테스트 클래스 에 테스트 대상 을 직접 주입 합 니 다.
//
@Setter
public class Employee {
private String name;
}
//
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class EmployeeTest {
@Autowired
private ApplicationContext ctx;
@Test
public void test1() throws Exception {
Employee bean = ctx.getBean("employee", Employee.class);
System.out.println(bean);
}
}
//application
구조 기 주입: 구조 기 를 통 해 대상 을 만 들 때 의존 대상 을 주입 합 니 다.
constructor - arg: 구조 기 파라미터
1, spring 이 실례 화 대상 일 때 대상 이 constructor - arg 를 설정 하지 않 으 면 기본 구조 기 실례 화 대상 2 를 사용 합 니 다. constructor - arg 가 있 으 면 spring 은 이 constructor - arg 를 사용 하여 구조 기 1 을 유일 하 게 확인 합 니 다. 기본 적 인 상황 에서constructor - arg 의 순 서 는 구조 기 매개 변수 순서 2, 3 에서 구조 기 순 서 를 조정 하 는 것 입 니 다. 1. index: 구조 기 에 있 는 매개 변수 위치 2. type: 구조 기 에 있 는 매개 변수 유형 3. name: 구조 기 에 있 는 매개 변수 이름 에 따라 값 을 설정 합 니 다.
어떤 주입 방식 을 사용 하 는 것 이 좋 습 니까?
1. 만약 에 한 종류 가 다른 종류 에 의존 해 야 정상적으로 운행 할 수 있다 면 구조 기 를 사용한다.2. 그러나 구조 기의 매개 변수 가 너무 많 으 면 구조 기 가 보기 어렵다.3. 더 많은 것 은 setter 로 주입 합 니 다.4, @ Required 탭 을 사용 하여 속성 을 주입 해 야 합 니 다.
public class Employee {
private String name;
public Employee(String name) {
this.name = name;
}
}
//application
속성 자리 차지 문자 (property place holder)
spring 속성 자리 차지 문자 생 성 연결 풀 대상
의존 하 는 jar: > > MySQL 드라이버 > > druid 패키지.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class PropertyPlaceHolderTest {
@Autowired
private DataSource ds ;
@Test
public void testLink() throws Exception {
Connection conn = ds.getConnection();
String sql = "select * from user";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
}
}
응용 프로그램 프로필
db. properties 파일
jdbd.driverClassName=com.mysql.jdbc.Driver
jdbd.url=jdbc:mysql:///springdemo
jdbd.username=root
jdbd.password=admin
총결산
이상 은 스프링 의 IoC 와 DI 에 관 한 상세 한 모든 내용 이 므 로 여러분 께 도움 이 되 기 를 바 랍 니 다.참고: 자바 탐색 의 Thread + IO 파일 의 암호 화 복호화 코드 인 스 턴 스, spring 설정 스 캔 여러 개의 가방 문제 분석, Springboot 의 Spring 장점 등에 대해 말씀 드 리 겠 습 니 다. 어떤 문제 가 있 으 면 언제든지 댓 글로 지적 해 주 셔 서 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.