IoC는 대부분 응용 프로그램이 성장하기 시작하고 모듈화/느슨한 결합을 위해 설계하지 않기 때문에 합리적인 경계가없는 많은 상호 연결된 클래스로 끝나기 때문에 IoC는 Java 언어에서 가장 좋은 점입니다.
스프링 및 기타 IoC/DI 프레임 워크는 처음부터 모듈화에 대해 생각하게합니다. 모듈 식/느슨하게 결합 된 코드를 사용하면 구성 요소 화 및 재사용이 훨씬 많아 지므로 단위 테스트를 더 잘 수행 할 수 있습니다 (단위 테스트를 수행하는 경우). 내가 DAO를 작성하려면
, 나는 앞까지의 인터페이스를 정의 할 수 있습니다
interface IPersonDao {
List<Person> getPersonsByTeam(String teamName);
}
을 한 후, 난 그냥 어디 봄 년대 SRC의에서이 인터페이스의 구현을 위해 호출 할 수 있습니다 "적용되고 ".내가 서비스 계층에서 그것을 필요로한다고 가정
class MyService {
@Autowired
IPersonDao svc;
}
또는 테스트 클래스에
을 :
class TestPersonDao {
@Autowired
IPersonDao svc;
@Test
void testGetPersons(){
List<Person> persons = svc.getPersonsByTeam("billing");
Assert.assertDataSet(persons, "billing.xml");
}
}
게다가, 내 다오 구현이 다오 계약 덤비는없이 데이터 액세스의 복잡성을 숨길 수 있습니다. 나는 최대 절전 모드 세션 또는 지속성 관리자를 필요로하는 경우, 난 그냥 그 선언 : 클래스의
class JpaPersonDao implements IPersonDao {
@PersistenceContext
EntityManager em;
List<Person> getPersonsByTeam(String tm) {
em.createQuery("...");
}
}
컴포넌트 화는 협력 콩를 연결하기 위해 레지스트리를 필요로한다. 이것은 손으로 개발할 수 있지만 이미이를 수행하는 DI 프레임 워크가 있습니다. 게다가 Spring은 예외 변환, aspect 프로그래밍 지원, MVC 프레임 워크, 포틀릿 프레임 워크, hibernate, jpa 및/또는 다른 db 스택과의 통합과 같은 많은 것들을 많이 가지고있다. 물론 Spring IoC와 잘 어울린다.
저는 Ruby on Rails 배경에서 Spring을 배우고 있으며 Spring이 해결하는 문제에 깊은 인상을 받았습니다. 그리고 Microsoft의 세계는 무엇입니까? 그들은 그러한 틀을 가지고 있습니까? NHibernate가 있지만 공식 NSpring이나 그런 계획이 있습니까? –
Spring.NET이라고합니다. 사용할 수있는 .NET IoC 프레임 워크가 많이 있습니다. – kgiannakakis