프로그램 해상도 결합 사상,spring IOC,DI

10852 단어
프로그램 결합 사상
결합성(Coupling)은 결합도라고도 부르며 모듈 간의 연관 정도에 대한 도량이다.결합의 강약은 모듈 간 인터페이스의 복잡성, 모듈을 호출하는 방식과 인터페이스를 통해 데이터를 얼마나 전송하는지에 달려 있다.모듈 간의 결합도는 모듈 간의 의존 관계를 가리키며 제어 관계, 호출 관계, 데이터 전달 관계를 포함한다.모듈 간의 연결이 많을수록 결합성이 강하고 독립성이 떨어진다는 것을 나타낸다(결합성을 낮추면 독립성을 높일 수 있다).결합성은 소프트웨어 디자인에서만 있는 것이 아니라 각 분야에 존재하지만 우리는 소프트웨어 공학에서의 결합만 논의한다.소프트웨어 공학에서 결합은 바로 대상 간의 의존성을 가리킨다.대상 간의 결합이 높을수록 유지 보수 원가가 높다.따라서 대상의 디자인은 클래스와 부품 간의 결합을 최소화해야 한다.소프트웨어 디자인에서는 일반적으로 결합도와 내집도를 모듈의 독립 정도를 평가하는 표준으로 한다.모듈을 구분하는 하나의 준칙은 바로 고내중 저결합이다.
프로그램의 결합
결합: 프로그램 간의 의존 관계
클래스 간의 의존, 방법 간의 의존
해결: 프로그램 간의 의존 관계를 낮추다
실제 개발 중: 컴파일링 기간이 의존하지 않고 실행할 때 의존해야 한다.
해결 방법:
첫 번째 단계: 새 키워드를 사용하지 않고 반사로 대상을 만듭니다.
2단계: 프로필을 읽어서 만들 대상의 한정된 클래스 이름을 가져옵니다
예를 들어, DriverManager를 사용합니다.registerDriver(new com.mysql.jdbc.Driver()); 문장, 대응하는 의존이 없으면 컴파일링 기간에 이상을 보고할 수 있으며, 모든Class를 사용합니다.forName("com.mysql.jdbc.Driver"); 설정 파일을 반사적으로 읽어서 결합도를 낮추다
public class JdbcDemo1 {
    public static void main(String[] args) throws  Exception{
        //1.    
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        //Class.forName("com.mysql.jdbc.Driver");

        //2.    
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/eesy","root","1234");
        //3.             
        PreparedStatement pstm = conn.prepareStatement("select * from account");
        //4.  SQL,     
        ResultSet rs = pstm.executeQuery();
        //5.     
        while(rs.next()){
            System.out.println(rs.getString("name"));
        }
        //6.    
        rs.close();
        pstm.close();
        conn.close();
    }
}

다음 코드, private IaccountDao accountDao = new AccountDao Impl ().만약dao층에 대응하는 실현 클래스가 없다면 컴파일링 시 이상이 발생하고 프로그램 결합도가 높으며 건장하지 못합니다
public class AccountServiceImpl implements IAccountService {

    private IAccountDao accountDao = new AccountDaoImpl();

    //private IAccountDao accountDao = (IAccountDao)BeanFactory.getBean("accountDao");

//    private int i = 1;

    public void  saveAccount(){
        int i = 1;
        accountDao.saveAccount();
        System.out.println(i);
        i++;
    }
}


우선properties 파일을 설정합니다
accountService=com.itheima.service.impl.AccountServiceImpl
accountDao=com.itheima.dao.impl.AccountDaoImpl
/**
 *     Bean     
 *
 * Bean:       ,         。
 * JavaBean: java          。
 *      javabean >     
 *
 *           service dao   。
 *
 *      :              service dao
 *                :    =     (key=value)
 *      :              ,      
 *
 *            xml    properties
 */
public class BeanFactory {
    //    Properties  
    private static Properties props;

     //        Properties    
    static {
        try {
            //     
            props = new Properties();
            //  properties      
            InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
            props.load(in);
            }
        }catch(Exception e){
            throw new ExceptionInInitializerError("   properties  !");
        }
    }


 public static Object getBean(String beanName){
        Object bean = null;
        try {
            String beanPath = props.getProperty(beanName);
            System.out.println(beanPath);
            bean = Class.forName(beanPath).newInstance();//                
        }catch (Exception e){
            e.printStackTrace();
        }
        return bean;
    }
   
}


단일 모드
public class BeanFactory {
    //    Properties  
    private static Properties props;

    //    Map,            。         
    private static Map beans;

    //        Properties    
    static {
        try {
            //     
            props = new Properties();
            //  properties      
            InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
            props.load(in);
            //     
            beans = new HashMap();
            //          Key
            Enumeration keys = props.keys();
            //    
            while (keys.hasMoreElements()){
                //    Key
                String key = keys.nextElement().toString();
                //  key  value
                String beanPath = props.getProperty(key);
                //      
                Object value = Class.forName(beanPath).newInstance();
                // key value     
                beans.put(key,value);
            }
        }catch(Exception e){
            throw new ExceptionInInitializerError("   properties  !");
        }
    }

    /**
     *   bean       
     * @param beanName
     * @return
     */
    public static Object getBean(String beanName){
        return beans.get(beanName);
    }

}

[이미지 업로드 실패...(image-ec806-1596714253764)]
[이미지 업로드 실패...(image-b3347b-1596714253764)]
IOC
빈을 실례화하는 세 가지 방법.
첫 번째 방식: 기본 무참구조 함수 사용하기
두 번째 방식:spring 정적 공장 관리 - 정적 공장 방법으로 대상 만들기/**
정적 공장을 모의하여 업무층 구현 클래스*/public class StaticFactory {public static Iaccount Service create Account Service () {return new Account Service Impl ()}
세 번째 방식:spring관리 실례공장 - 실례공장을 사용하는 방법으로 대상 만들기/**
하나의 실례 공장을 모의하여 업무층 실현 클래스*이 공장 창설 대상을 만들려면 기존 공장 실례 대상을 호출하고 방법*/public class Instance Factory {public Iaccount Service create Account Service () {return new Account Service Impl ()}
  
  


 
 
 

  

 

 

DI
의존 주입의 개념
종속 주입: Dependency Injection.이것은spring 프레임워크의 핵심 ioc의 구체적인 실현이다.우리의 프로그램은 작성할 때 반전을 제어하여 대상의 생성을spring에 맡기지만 코드에 의존하지 않는 상황이 발생할 수 없습니다.ioc 결합은 그들의 의존 관계를 낮출 뿐이지 해소되지는 않는다.예를 들어 우리의 업무층은 여전히 지구층의 방법을 사용할 것이다.그러면 이런 업무층과 지구층의 의존 관계는 스프링을 사용한 후에 스프링이 유지하게 된다.간단하게 말하면, 앉아서 구조가 지구층의 대상을 업무층에 전달하고, 우리가 직접 얻지 않아도 된다는 것이다.
구조 함수 주입은 말 그대로 클래스의 구조 함수를 사용하여 구성원 변수에 값을 부여하는 것이다.값을 부여하는 작업은 우리가 하는 것이 아니라 스프링 프레임워크를 설정해서 주입하는 것입니다.
public class AccountServiceImpl implements IAccountService {    
    private String name; 
    private Integer age;  
    private Date birthday;
    
    public AccountServiceImpl(String name, Integer age, Date birthday) {
        this.name = name;  
        this.age = age;   
        this.birthday = birthday;  
    } 
 
    @Override  
    public void saveAccount() {  
        System.out.println(name+","+age+","+birthday);   
    }
} 
 
    
  
 

set 메소드 주입
말 그대로 클래스에 구성원을 주입해야 하는 set 방법을 제공합니다
public class AccountServiceImpl implements IAccountService {    
    private String name;  
    private Integer age;  
    private Date birthday;    
    public void setName(String name) {   
        this.name = name;  
    }  
    public void setAge(Integer age) {   
        this.age = age;  
    }  
    public void setBirthday(Date birthday) {
        this.birthday = birthday;  
    } 
 
    @Override  
    public void saveAccount() {
        System.out.println(name+","+age+","+birthday);   
    } 
} 
   
     
       
     


주입 집합 속성
말하자면 클래스의 집합 구성원에게 값을 전달하는 것이다. 이것은 set 방법으로 주입하는 방식을 사용하지만 변수의 데이터 형식은 모두 집합이다.
public class AccountServiceImpl implements IAccountService {
    private String[] myStrs;  
    private List myList;  
    private Set mySet;  
    private Map myMap;  
    private Properties myProps;    
    public void setMyStrs(String[] myStrs) { 
        this.myStrs = myStrs;  
    }  
    public void setMyList(List myList) { 
        this.myList = myList;  
    }  
    public void setMySet(Set mySet) {   
        this.mySet = mySet; 
    }  
    public void setMyMap(Map myMap) { 
        this.myMap = myMap; 
    }  
    public void setMyProps(Properties myProps) { 
        this.myProps = myProps;  
    } 
 
     @Override 
    public void saveAccount() {
        System.out.println(Arrays.toString(myStrs));  
        System.out.println(myList);  
        System.out.println(mySet);  
        System.out.println(myMap);   
        System.out.println(myProps); 
    }
} 

      
      
     
        
            AAA
            BBB
            CCC
         
     
      
       
            
            AAA    
            BBB    
            CCC   
          
     
       
    
            
            AAA    
            BBB    
            CCC   
          
     
      
       
         
            aaa    
            bbb   
         
     
    
      
            
             
                
                bbb 
               
           
     

좋은 웹페이지 즐겨찾기