Spring 4 새로운 기능 - 핵심 용기 의 기타 개선
Spring 4 새로운 기능 - 핵심 용기 의 기타 개선
Spring 4 새로운 특성 - 웹 개발 의 강화
Spring 4 의 새로운 기능 - 통합 Bean Validation 1.1 (JSR - 349) 부터 SpringMVC 까지
Spring 4 새로운 기능 - Groovy Bean 정의 DSL
Spring 4 새로운 기능 - 더 좋 은 자바 범 형 조작 API
Spring 4 새로운 기능 - JSR 310 날짜 API 지원
Spring 4 새로운 기능 - 주석, 스 크 립 트, 작업, MVC 등 기타 기능 개선
'스프링 4 의 새로운 특성 - 범 형 한정 식 의존 주입' 을 이 어 스프링 4 의 다른 개선 사항 을 살 펴 보 자.
1. 맵 의존 주입:
@Autowired
private Map<String, BaseService> map;
이렇게 주입: key 는 bean 이름 입 니 다.value 는 BaseService 를 실현 한 모든 Bean 입 니 다. 이전 편 을 사용 한 예 를 가정 하면 다음 과 같 습 니 다.
{organizationService=com.sishuok.spring4.service.OrganizationService@617029, userService=com.sishuok.spring4.service.UserService@10ac73b}
2. List / 배열 주입:
@Autowired
private List<BaseService> list;
이렇게 하면 BaseService 를 실현 한 모든 Bean 을 주입 합 니 다.그러나 순 서 는 확실 하지 않다. 만약 우리 가 어떤 순서에 따라 얻 고 싶다 면.Spring 4 에서 @ Order 를 사용 하거나 Ordered 인 터 페 이 스 를 실현 할 수 있 습 니 다. 예 를 들 어:
@Order(value = 1)
@Service
public class UserService extends BaseService<User> {
}
이런 방식 은 다 형 이 필요 한 장면 에서 매우 유용 하 다.
3. @ Lazy 는 의존 주입 을 지연 시 킬 수 있 습 니 다.
@Lazy
@Service
public class UserService extends BaseService<User> {
}
@Lazy
@Autowired
private UserService userService;
우 리 는 @ Lazy 를 @ Autowired 위 에 놓 을 수 있 습 니 다. 즉, 주입 에 의존 하 는 것 도 지연 되 는 것 입 니 다.우리 가 userService 를 호출 할 때 만 주입 할 수 있 습 니 다.지연 의존 주입 사용 시.@ Bean 에 도 적 용 됩 니 다.
4、@Conditional
@ conditional 은
@Profile( 、 、 ,
@ Profile 에서 각 환경의 설정 을 지정 한 다음 에 특정한 설정 을 통 해 특정한 환경 을 열 고 전환 하기 편리 합 니 다 )
. 그러나 @ conditional 의 장점 은 자신 이 규칙 을 정의 할 수 있다 는 것 입 니 다.@ Component, @ Bean, @ Configuration 등 주석 과 같은 클래스 에 절대 Bean 생 성 여부 등 을 지정 할 수 있 습 니 다.먼저 @ Profile 을 사용 하 는 사례 를 살 펴 보고 사용자 모듈 이 있다 고 가정 합 니 다.1. 테스트 / 개발 기간 에 본 기계 의 아 날로 그 인 터 페 이 스 를 호출 하여 개발 하기에 편리 하 다.
2. 정식 기기 에 배치 할 때 원 격 인터페이스 로 바 꿉 니 다.
public abstract class UserService extends BaseService<User> {
}
@Profile("local")
@Service
public class LocalUserService extends UserService {
}
@Profile("remote")
@Service
public class RemoteUserService extends UserService {
}
테스트 용례 를 쓸 때 어떤 Profile 을 사용 할 지 지정 할 수 있 습 니 다.
@ActiveProfiles("remote")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-config.xml")
public class ServiceTest {
@Autowired
private UserService userService;
}
이런 방식 은 매우 간단 하 다.@ Profile 과 같은 주해 등 을 사용자 정의 하려 면 @ Conditional 이 도움 이 됩 니 다.만약 에 우리 시스템 에 로 컬 / 원 격 인터페이스 가 많다 고 가정 하면 우 리 는 두 개의 주 해 를 @ Local 과 @ Remote 주 해 를 사용 하 는 것 이 @ Profile 을 사용 하 는 것 보다 훨씬 편리 하 다 고 정의 합 니 다.예:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Conditional(CustomCondition.class)
public @interface Local {
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Conditional(CustomCondition.class)
public @interface Remote {
}
public class CustomCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
boolean isLocalBean = metadata.isAnnotated("com.sishuok.spring4.annotation.Local");
boolean isRemoteBean = metadata.isAnnotated("com.sishuok.spring4.annotation.Remote");
// bean @Local @Remote, true, Bean
if(!isLocalBean && !isRemoteBean) {
return true;
}
boolean isLocalProfile = context.getEnvironment().acceptsProfiles("local");
// profile=local bean @Local, true bean;
if(isLocalProfile) {
return isLocalBean;
}
// @Remote @Remote Bean
return isRemoteBean;
}
}
그리고 우 리 는 이 두 개의 주 해 를 사용 하여 각각 우리 의 서 비 스 를 주해 합 니 다.
@Local
@Service
public class LocalUserService extends UserService {
}
@Remote
@Service
public class RemoteUserService extends UserService {
}
먼저 @ Local 과 @ Remote 주석 에 @ Conditional (CustomCondition. class) 이 지정 한 조건 을 사용 한 다음 @ Local 과 @ Remote 를 사용 하여 서 비 스 를 설명 합 니 다. 이렇게 서 비 스 를 불 러 올 때 조건 을 먼저 실행 한 다음 Bean 으로 불 러 올 지 여 부 를 판단 합 니 다. @Profile 은 이렇게 이 루어 졌 습 니 다. Condition 은 org. springframework. context. annotation. ProfileCondition 입 니 다.소스 코드 를 보 러 갈 수 있 습 니 다. 간단 합 니 다.
5. CGLIB 를 기반 으로 하 는 클래스 에이 전 트 는 클래스 에 빈 파 라 메 트릭 을 요구 하지 않 습 니 다.
이것 은 아주 좋 은 특성 입 니 다. 구조 기 를 사용 하여 주입 하면 좋 은 점 이 많 습 니 다. 예 를 들 어 Bean 을 만 들 때 만 의존 을 주입 한 다음 에 변 하지 않 습 니 다. setter 주입 을 사용 하면 다른 사람 이 고 칠 수 있 습 니 다.물론 우 리 는 spring 의 필드 단 계 를 사용 하여 주입 할 수 있다.만약 여러분 이 Shiro 와 같은 것 을 사용 한 적 이 있다 면, 우 리 는 Controller 에 대 리 를 해 야 할 것 입 니 다.클래스 에이전트 라면 컨트롤 러 에 빈 파 라 메 트릭 이 있어 야 하 며 귀 찮 을 때 도 있다.spring 은 어떻게 이 루어 졌 나 요?그 안에 obbenesis 라 이브 러 리 가 연결 되 어 있 으 며 이 를 통 해 이 루어 집 니 다. 홈 페이지 에 가서 소 개 를 볼 수 있 습 니 다.이렇게 하면 다음 과 같은 방식 의 구조 기 주입 을 지원 합 니 다.
@Controller
public class UserController {
private UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
}
org. springframework. cglib. proxy. Enhancer 는 github 와 maven 창고 에 있 는 source 에 'github' 가 있 습 니 다.https://github.com/spring-projects/spring-framework/tree/master/spring-core/src/main/java/org/springframework/cglib;설마 잊 었 단 말 인가?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.