Extension

Custom

package example.u2ware.springfield.part3.step2;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import com.u2ware.springfield.config.Springfield;
import com.u2ware.springfield.config.Springfield.Strategy;
import com.u2ware.springfield.repository.QueryMethod;

import example.u2ware.springfield.part1.step2.JpaBean;

@Springfield(
        strategy=Strategy.JPA, 
        entity=JpaBean.class
)
@QueryMethod("findByIdAndPasswordOrderByNameDesc")
public @ToString class Custom {
        
        private @Getter @Setter Integer id;
        private @Getter @Setter String password;
}

CustomQueryService

package example.u2ware.springfield.part3.step2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.u2ware.springfield.domain.EntityPageable;
import com.u2ware.springfield.repository.EntityRepository;
import com.u2ware.springfield.service.EntityServiceImpl;

import example.u2ware.springfield.part1.step2.JpaBean;

@Service
public class CustomService extends EntityServiceImpl<JpaBean, Custom>{

        @Autowired
        public CustomService(
                @Qualifier("jpaBeanRepository")EntityRepository<JpaBean, Integer> r) {
                super("jpaBeanRepository", r);
        }

        @Override
        @Transactional
        public Iterable<JpaBean> findForm(Custom request, EntityPageable pageable) {
                logger.debug("Overide findForm ");
                return super.findForm(request, pageable);
        }
}

@Springfield

@Springfield 선언으로 다음 3개의 Bean 이 자동 생성, 등록 된다.

bean idbean typeimplements type
"customController" EntityController<JpaBean, Custom> com.u2ware.springfield.controller. EntityHandler
"customService" EntityService<JpaBean, Custom> example.u2ware.springfield.part3.step2. CustomService
"jpaBeanRepository" EntityRepository<JpaBean, Integer> com.u2ware.springfield.repository.jpa. EntityJpaRepository

자동생성된 빈은 다음과 같이 하위 Layer 의 Bean 을 주입받아서 의존 관계를 갖는다.

"customController" <- "customService" <- "jpaBeanRepository"

Note:
@Springfield 에 의해 생성되는 Bean 의 메소드를 오버라이드 하기 위한 방법이다.
application-context.xml:
Bean Name 이 springframework 의 applicationContext 에 등록 되어있다면, @Springfield 는 새로운 Bean 을 생성하지 않는다.
즉, 예제에서 "customService" 라는 이름의 Bean 은 @Service 에 의해 등록되므로 @Springfield 는 Service Bean 을 따로 생성하지 않는다. 설정 파일에 springframework 의 component-scan 이 선언되어 있어야 한다.

<context:component-scan base-package="example.u2ware.springfield" />