Spring 의 IOC 상세 설명

7009 단어 springioc
Spring 을 배 운 파트너 는 IOC 에 낯 설 지 않 을 것 이다.IOC:반전 제어(Inversion of Control,영어 줄 임 말 IoC)는 컴퓨터 프로그램의 결합 문 제 를 줄 이 는 중요 한대상 지향 프로 그래 밍법칙 이자 경량급 Spring 프레임 워 크 의 핵심 이다.제어 반전 은 일반적으로 주입(Dependency Injection,약칭DI과 찾기(Dependency Lookup)에 의존 하 는 두 가지 유형 으로 나 뉜 다.의존 주입 응용 이 비교적 광범 위 하 다.이 편 에서 우 리 는 하나의 실례 를 통 해 스프링 중의 IOC 의 원 리 를 간단하게 분석 함으로써 스프링 을 더욱 잘 이해 할 수 있 도록 한다.
간단하게 우리 의 장면 을 묘사 하고 새로운 사용 자 를 데이터베이스 에 추가 합 니 다.여기 서 우 리 는 층 을 나 누 는 방식 으로 기능 을 실현 합 니 다.우 리 는 개발 프로그램 이 반드시 프로그램의 이식 성에 주의해 야 한 다 는 것 을 알 고 있 습 니 다.그래서 여기 서 간단하게 인 터 페 이 스 를 대상 으로 프로 그래 밍 을 소개 합 니 다.면 방향 인터페이스 프로 그래 밍 은 추상 적 인 프로 그래 밍,규범 적 인 프로 그래 밍 입 니 다.그것 이 가 져 온 가장 큰 장점 은 바로 결합 을 해제 하고 확장 성 을 강화 하 며 변 화 를 차단 하 는 것 이다.

자,다음은 제 업무 실현 을 시작 하 겠 습 니 다.우선 모델-Userdo.자바 를 만들어 야 합 니 다.

public class UserDO {
 private String name;
 private String password;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
}
사용자 대상 이 생 겼 습 니 다.다음 에 저 희 는 Selvect 류 를 만 들 기 시 작 했 습 니 다.Selvect 는 사용자 의 요청 을 받 은 대상 을 사용 한 것 을 알 고 있 습 니 다.여 기 는 여러분 의 이 해 를 편리 하 게 하기 위해 서 입 니 다.그래서 저 희 는 Selvect 에서 사용자 의 요청 을 받 은 후에 관련 업무 논리 처 리 를 모 의 했 습 니 다.

public class UserSelvect {
 public static void main(String[] args) {
  UserDO userDO = new UserDO();
  BeanFactory beanFactory = new ClassPathXmlApplicationContext();//     Bean  
  UserService userService = (UserService) beanFactory.getBean("userService");//          
  userService.add(userDO);//      
 }
}
일반적으로 우리 의 업무 논 리 는 Service 층 에 놓 여 조작 하기 때문에 나 는 먼저 우리 의 Service 대상 을 볼 수 있다.

public class UserService {
 private UserDao userDao;//  DAO  
 public UserDao getUserDao() {
  return userDao;
 }
 //  Bean     DAO    
 public void setUserDao(UserDao userDao) {
  this.userDao = userDao;
 }
 //  Selvect    ,        
 public void add(User u){
  userDao.add(u);
 }
}
다음은 우리 의 DAO 층 의 실현 입 니 다.여기 서 설명 하 겠 습 니 다.프로그램의 이식 성 을 극 대화 하기 위해 다음 에 인터페이스 프로 그래 밍 의 실현 으로 디자인 할 것 입 니 다.

/**
 * DAO       
 *            
 */
public interface UserDao {
 public void add(User u);
}
인 터 페 이 스 를 위 한 프로 그래 밍 이 므 로 인터페이스 클래스 가 필요 합 니 다.

public class UserDaoImpl implements UserDao{
 public void add(User u){
  System.out.println("        ");
 }
}
자,여기까지 우리 의 기본 프레임 워 크 가 완성 되 었 습 니 다.그 다음 에 중점 적 인 내용 을 시작 해 야 합 니 다.먼저 xml 해석 에 관 한 지식 을 알 아야 합 니 다.이전 블 로그 에서 Jdom 은 XML 파일 을 읽 고 모 르 는 파트너 는 먼저 걸음 을 옮 겨 간단하게 볼 수 있 습 니 다.그러면 다음 내용 은...너 야 말로 힘 들 정 도 는 아니다.다음은 이 데모 디자인 을 진행 하 겠 습 니 다.먼저 src 디 렉 터 리 에 Spring.xml 파일 을 추가 합 니 다.

<?xml version="1.0" encoding="UTF-8"?>
<beans>
 <bean id="userDao" class="com.manyiaby.daoimpl.UserDaoImpl"></bean>
 <bean id="userService" class="com.manyiaby.service.UserService">
  <property name="userDao" bean="userDao"></property>
 </bean>
</beans>
다음 에 저 희 는 Bean 프로젝트 대상 을 정의 합 니 다.Spring.xml 파일 을 읽 고 대상 인 스 턴 스 의 생 성 을 완성 하 며 다음 업무 작업 을 수행 합 니 다.

public interface BeanFactory {
 public Object getBean(String className);
}
여러분 은 우리 빈 공장 도 인터페이스 프로 그래 밍 을 사용 하 는 사상 을 발견 하 셨 습 니까?다음은 우리 공장 의 실현 유형 을 살 펴 보 겠 습 니 다.

public class ClassPathXmlApplicationContext implements BeanFactory{
 private Map<String, Object> beanMap = new HashMap<String, Object>();//            
 public ClassPathXmlApplicationContext(){
  try {
   SAXBuilder saxBulder = new SAXBuilder();
   Document doc = saxBulder.build(ClassPathXmlApplicationContext.class
     .getClassLoader().getResourceAsStream("spring.xml"));
   Element root = doc.getRootElement();//     
   List<Element> list = root.getChildren("bean");
   for (Element element : list) {
    String id = element.getAttributeValue("id");//  beanId
    String className = element.getAttributeValue("class");//  Bean     
    System.out.println(className);
    Object object = Class.forName(className).newInstance();
    beanMap.put(id, object);
    if (null != element.getChild("property")) {
     Element property = element.getChild("property");
     String name = property.getAttributeValue("name");
     String beanId = property.getAttributeValue("bean");
     Object beanObject = beanMap.get(beanId);//UserDaoImpl
     String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);//setUserDao
     System.out.println(methodName);
     Method m = object.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);//UserService SetUserDao()  ,      UserDao   
     m.invoke(object, beanObject);//  UserService SetUserDao()  ,  UserDaoImpl
    }
   }
  } catch (Exception e) {
   System.out.println("" + e);
  }
 }
 //     
 @Override
 public Object getBean(String className) {
  return beanMap.get(className);
 }
}
간단하게 소개 하 겠 습 니 다.저 희 는 beanMap 을 통 해 Spring 에 설 치 된 대상 을 반사 체 제 를 통 해 얻 은 다음 에 beanMap 대상 에 배치 하고 getBean 방법 을 통 해 외부 클래스 를 호출 합 니 다.
위 에 서 는 Spring 에서 IOC 의 일부 내용 을 간단하게 모 의 했 습 니 다.다음은 Spring 을 통 해 위의 작업 을 어떻게 완성 하 는 지 살 펴 보 겠 습 니 다.먼저 spring.jar 를 다운로드 해 야 합 니 다.이 jar 가 있 으 면 부족 합 니 다.spring 은 comons-logging.jar 에 의존 합 니 다.이 두 jar 가방 을 우리 프로젝트 에 도입 한 다음 에 어떻게 사용 하 는 지 살 펴 보 겠 습 니 다.

public class UserSelvect {
 public void main() {
  UserDO userDO = new UserDO();
  BeanFactory beanFactory = new ClassPathXmlApplicationContext("spring.xml");
  UserService userService = (UserService) beanFactory.getBean("userService");
  //ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
  //UserService userService = (UserService) context.getBean("userService");
  userService.add(userDO);
 }
}
다른 것 은 수정 할 필요 가 없습니다.아주 간단 하지 않 습 니까?자,Spring 에 관 한 내용 은 여기까지 소개 해 드 리 겠 습 니 다.
본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 우 리 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기