1 ,@ 구성 요소
@ 구성 요소
Spring 에서 관리하는 모든 구성 요소의 일반적인 형태입니다. @Component 주석은 클래스 시작 부분에 놓을 수 있지만 @Component 를 사용하지 않는 것이 좋습니다.
2, 컨트롤러
@Controller 는 레이어를 나타내는 Bean, 즉 동작을 나타냅니다. 예를 들면 다음과 같습니다.
1 @ 컨트롤러
2 @ 범위 ("프로토타입")
3 공용 클래스 UserAction 확장 BaseAction & lt 사용자>{
4 ...
5}
@Controller 주석을 사용하여 UserAction 을 식별하면 UserAction 이 Spring 컨테이너 관리에 넘겨진다는 의미입니다. Spring 컨테이너에는 userAction 의 클래스 이름에 따라 이름이 지정된' UserAction' 이라는 동작이 있습니다. 참고: @Controller 가 해당 값 @Controller 를 지정하지 않은 경우 기본 bean 이름은 이 클래스의 클래스 이름 (이니셜 소문자) 입니다. Value @ controller (value = "useraction") 또는 @Controller("UserAction ") 를 지정하면 value 가 bean 이름으로 사용됩니다.
여기서 UserAction 도 주석 @Scope, @ Scope(“prototype ") 을 사용하여 동작의 범위를 프로토타입으로 선언하고 컨테이너의 scope="prototype" 을 사용하여 각 요청이 별도의 동작으로 처리되도록 함으로써 피할 수 있습니다 Spring 의 기본 범위는 singleton 모드 (scope="singleton ") 로 Action 객체를 하나만 만듭니다. 각 액세스는 동일한 동작 객체이며 데이터는 안전하지 않습니다. Struts2 에서는 각 액세스에 대해 서로 다른 동작이 필요합니다. scope="prototype "은 요청이 있을 때 동작 객체가 생성되도록 합니다.
3, @ 서비스
@Service 는 비즈니스 계층 Bean 에 해당합니다. 예를 들면 다음과 같습니다.
1 @ 서비스 ("사용자 서비스")
2 공용 클래스 UserServiceImpl 구현 UserService {
3 ......
4}
Annotation @ service ("userService") 는 Spring 에게 UserServiceImpl 의 인스턴스를 만들 때 bean 의 이름을 "userservice" 라고 부르며 Spring 에서 좋은 "userService" 를 만들어 Action 에 주입할 수 있습니다. Action 에서는 "userService" 라는 변수만 선언하면 Spring 에서 주입한 "user Service" 를 받을 수 있습니다 구체적인 코드는 다음과 같습니다.
1 // 사용자 서비스 주입
2 @ resource (이름 = "userservice")
3 개인 UserService 사용자 서비스;
참고: 작업에 선언된 "UserService" 변수의 유형은 "UserServiceImpl" 또는 상위 클래스 "userService" 여야 합니다. 그렇지 않으면 작업에 선언된 "userService" 로 인해 유형 불일치로 인해 주입할 수 없습니다 Name = "userService "를 지적하는 것은" userService "를 인스턴스화하도록 Spring 에 지시하는 것과 같습니다. 너는 봄에 빨리 나를 도와 인스턴스화해 주고 나에게 줘. Spring 이 userService 변수에서 @Resource 의 주석을 볼 때 지정된 name 속성에 따라 알 수 있습니다. 작업에서 UserServiceImpl 의 인스턴스를 사용해야 합니다. 이때 Spring 은 자신이 만든' userService' 라는 userServiceimpl 인스턴스를 액션의' userService' 변수에 주입하여 작업이 userservice 인스턴스화를 완료하는 데 도움을 줍니다. 이렇게 하면 "userserviceuserservice = newuserserviceimpl ();" 이 됩니다 행동에는 필요하지 않습니다. UserService 를 인스턴스화하는 원래 방법입니다. Spring 이 없으면 작업에 UserServiceImpl 이 필요할 때 "userserviceuserservice = newuserserviceimpl ();" 을 통과해야 합니다 인스턴스 객체를 능동적으로 생성하지만 Spring 을 사용하면 Action 이 UserServiceImpl 을 사용할 때 UserServiceImpl 의 인스턴스를 적극적으로 만들 필요가 없습니다. UserServiceImpl 을 만든 인스턴스는 이미 Spring 에 넘겨졌고, Spring 은 만든 UserServiceImpl 인스턴스를 Action 에 넘겨주고 Action 은 직접 사용할 수 있다. UserServiceImpl 의 인스턴스를 능동적으로 만든 직후 Action 을 사용할 수 있지만 이미 수동적으로 변했습니다. Spring 이 UserServiceImpl 의 인스턴스를 만든 후 Action 을 주입하면 Action 을 사용할 수 있습니다. 이는 Action 이' UserServiceImpl' 클래스의' 컨트롤' 을' 반전' 했다는 것을 보여준다. 원래 주동권은 자신의 손에 있었고,' USERSerserviceimpl' 클래스의 인스턴스를 사용하려고 했는데, 능동적으로 new 에 가면 바로 사용할 수 있지만, 지금은' USERSerserviceimpl' 클래스의 인스턴스를 능동적으로 갈 수 없다. 새로운' UserServiceImpl' 클래스의 인스턴스 기능은 이미 Spring 에 의해 빼앗겼다. Spring 만 새 "userserviceimpl" 클래스의 인스턴스를 만들 수 있으며 Action 은 Spring 이 "userserviceimpl" 클래스의 인스턴스를 만들 때까지 기다릴 수 있습니다. 그런 다음 "간청" Spring 은 "UserServiceImpl" 클래스의 인스턴스를 만들어 "UserServiceImpl" 을 사용하라고 했습니다. 이는 Spring "컨트롤 반전" 의 핵심 아이디어이며 "의존성 주입" 이라고도 합니다. 작업을 수행하려면 UserServiceImpl 이 필요합니다. 그리고 UserServiceImpl 에 의존하게 됩니다. Spring 은 Acion 이 의존해야 하는 UserServiceImpl 을 Action 에 주입 (즉, "부여") 하여 "종속 주입" 이라고 합니다. 행동의 경우, 행동이 무언가에 의존한다면 봄에 그의 몸에 주입해 주세요. 봄의 경우, 행동에 무엇이 필요하다면, 봄은 자발적으로 그에게 주입할 것이다.
4, @ 창고
@Repository 는 데이터 액세스 계층 Bean 에 해당합니다. 예를 들면 다음과 같습니다.
1@ repository (값 = "userdao")
2 공용 클래스 UserDaoImpl 은 BaseDaoImpl & lt 사용자>{
3 ......
4}
@Repository(value="userDao ") 주석은 Spring 에게" userDao "라는 userDaoimpl 인스턴스를 만들도록 지시합니다.
서비스에 Spring 을 사용하여 만든' userDao' 라는 userDao impl 인스턴스가 필요한 경우 annotation @ resource (name = "userDao") 를 사용하여 Spring 에 알려 Spring 은 다음을 수행할 수 있습니다
1 // userDao 를 주입합니다. 사용자 Id 를 기준으로 데이터베이스에서 지정된 사용자를 검색해야 합니다.
2 @Resource(name = "userDao ")
3 개인 BaseDao & lt 사용자 & gtuserDao