주석 기반 DI
ioc 는 서비스 와 dao 대상 간 의 결합 을 실현 할 수 있 습 니 다.
자주 사용 하 는 주석:
1. 주 해 를 사용 하 는 절차
우선 새로운 항목 을 만 들 고 pom. xml 파일 에 의존 도 를 추가 합 니 다.
org.springframework
spring-context
5.2.5.RELEASE
2. @ Component
우선 학생 클래스 만 들 기
package com.md.b1;
import org.springframework.stereotype.Component;
/**
* @author MD
* @create 2020-08-08 15:51
* @Component: ,
* :value , bean id ,
* value , spring
* :
*
* @Component(value = "myStudent")
*
*/
//@Component(value = "myStudent")
// value,
@Component("myStudent")
// , spring : (student)
//@Component
public class Student {
private String name;
private Integer age;
public Student() {
System.out.println(" Student ");
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
그리고 spring 설정 파일 에 applicationContext. xml 를 구성 요소 스캐너 에 추가 합 니 다.
테스트:
package com.md;
import com.md.b1.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author MD
* @create 2020-08-08 16:05
*/
public class MyTest01 {
@Test
public void test01(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//
Student student = (Student) ac.getBean("myStudent");
System.out.println(student);
}
}
주의 1: 여러 가방 의 세 가지 방식 을 지정 합 니 다.
중점:
주의 2: spring 과 @ Component 기능 이 일치 합 니 다. 생 성 대상 에 대한 설명 은 다음 과 같 습 니 다.
상기 세 개의 주해 의 사용 문법 은 @ Component 와 같 습 니 다.대상 을 만 들 수 있 지만 이 세 개의 주 해 는 추가 기능 이 있 습 니 다.
@ Repository, @ Service, @ Controller 는 프로젝트 의 대상 을 층 으로 나 누 어 줍 니 다.
어떤 종 류 는 위의 세 개의 주석 이 모두 적합 하지 않 을 때 @ Component 를 사용 합 니 다.
: , ?
3. @ Value
속성 에 주석 @ Value 를 사용 해 야 합 니 다. 이 주해 의 value 속성 은 주입 할 값 을 지정 하 는 데 사 용 됩 니 다.이 주 해 를 사용 하여 속성 주입 을 완료 할 때 클래스 에 setter 가 필요 없습니다.물론 속성 에 setter 가 있 으 면 setter 에 추가 할 수 있 습 니 다.
다음 과 같다.
package com.md.b2;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author MD
* @create 2020-08-08 15:51
*/
@Component("myStudent")
public class Student {
/**
* @Value:
* : value String ,
* : 1. , set , 。
* 2. set
*/
// @Value(value = " ")
@Value(" ")
private String name;
// @Value(value = "18")
@Value("22")
private Integer age;
public Student() {
System.out.println(" Student ");
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
그리고 spring 설정 파일 에 applicationContext. xml 를 구성 요소 스캐너 에 추가 합 니 다.
테스트
@Test
public void test01(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//
Student student = (Student) ac.getBean("myStudent");
System.out.println(student);
// Student
//Student{name=' ', age=22}
}
4. @ Autowired
byType
@ Autowired: spring 프레임 워 크 가 제공 하 는 주석 으로 참조 형식의 할당 을 실현 합 니 다.
인용 속성 에 주석 @ Autowired 를 사용 해 야 합 니 다. 이 주 해 는 기본적으로 유형 에 따라 Bean 을 자동 으로 조립 하 는 방식 (by Type) 을 사용 합 니 다.
package com.md.b3;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author MD
* @create 2020-08-08 16:39
*/
@Component("student")
public class Student {
@Value(" ")
private String name;
@Value("20")
private Integer age;
/**
*
* @Autowired:spring ,
* spring , byName,byType
* byType
*
* : , set ,
* set
*/
// School , bean set
@Autowired
private School school;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", school=" + school +
'}';
}
}
스 쿨 클래스
package com.md.b3;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author MD
* @create 2020-08-08 16:40
*/
@Component("mySchool")
public class School {
@Value(" ")
private String name;
@Value(" ")
private String address;
@Override
public String toString() {
return "School{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
public void setName(String name) {
this.name = name;
}
public void setAddress(String address) {
this.address = address;
}
}
그리고 spring 설정 파일 에 applicationContext. xml 를 구성 요소 스캐너 에 추가 합 니 다.
테스트 는 위 와 마찬가지 로 쓰 지 않 습 니 다. 주 해 를 사용 하 는 것 외 에 xml 방식 도 사용 할 수 있 습 니 다.
이렇게 하면 된다.
5. @ Qualifier
byName
@ Autowired 는 기본적으로 by Type 을 사용 하기 때문에 by Name 방식 을 사용 하기 위해 서 입 니 다.
인용 속성 에 주석 @ Autowired 와 @ Qualifier 를 공동으로 사용 해 야 합 니 다.
@ Qualifier 의 value 속성 은 일치 하 는 Bean 의 id 값 을 지정 하 는 데 사 용 됩 니 다.
byName
1. @Autowired
2. @Qualifier(value="bean id") , bean
스 쿨 클래스
@Component("school")
public class School {
@Value(" ")
private String name;
@Value(" ")
private String address;
@Override
public String toString() {
return "School{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
학생 류
@Component("student")
public class Student {
@Value(" ")
private String name;
@Value("20")
private Integer age;
// School school
@Autowired
@Qualifier("school")
private School school;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", school=" + school +
'}';
}
}
속성: required, boolean 형식의 기본 true
예 를 들 어 위의 프로그램 에서
byName 방식 을 사 용 했 는데, 이 때 비 안의 id 를 잘못 썼 습 니 다.
@Component("student")
public class Student {
@Value(" ")
private String name;
@Value("20")
private Integer age;
// School school
@Autowired(required = false)
@Qualifier("schoo")
private School school;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", school=" + school +
'}';
}
}
6. @ Resource
spring 은 jdk 에서 @ Resource 주석 에 대한 지원 을 제공 합 니 다.
@ Resource 주 해 는 이름 에 따라 Bean 과 일치 할 수도 있 고 유형 에 따라 Bean 과 일치 할 수도 있 습 니 다.기본 값 은 이름 으로 입력 (by Name)
이 설명 을 사용 하면 JDK 는 6 이상 버 전이 어야 합 니 다. @ Resource 는 속성 적 으로 도, set 방법 으로 도 가능 합 니 다.
학교
@Component("school")
public class School {
@Value(" ")
private String name;
@Value(" ")
private String address;
@Override
public String toString() {
return "School{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
이때
@Component("student")
public class Student {
@Value(" ")
private String name;
@Value("20")
private Integer age;
/**
*
* @Resource: jdk ,spring ,
* , byName, byType . byName
* : 1. , set , 。
* 2. set
*/
// byName: byName , byName , byType
//@Resource
// byName , name,name bean id( )
@Resource(name = "school")
private School school;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", school=" + school +
'}';
}
}
spring 설정 파일 에 applicationContext. xml 구성 요소 스캐너 추가
테스트:
@Test
public void test01(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//
Student student = (Student) ac.getBean("student");
System.out.println(student);
// Student{name=' ', age=20, school=School{name=' ', address=' '}}
}
7. XML 과 주해 비교
주해 의 장점 은 편리 하고 직관 적 이 며 효율 적 이라는 것 이다.
단점: 자바 코드 에 하 드 인 코딩 으로 기록 하고 코드 를 다시 컴 파일 해 야 합 니 다.
자주 고치 지 않 는
XML 방식 의 장점 은 설정 과 코드 가 분리 되 어 xml 에서 수정 되 며 코드 를 컴 파일 할 필요 가 없고 서버 를 다시 시작 하면 새로운 설정 을 불 러 올 수 있다 는 것 이다.
단점: 번 거 롭 고 효율 이 낮 으 며 대형 프로젝트 가 너무 복잡 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.