Spring依赖原理

一:依赖原理
在程序中要分层,且层与层之间要使用接口,就会有如下代码
public class UserServiceImpl {
    private UserDao userDao = new MySQLUserDaoImpl();
    // ...
}
1. 依赖过程
jdbc.properties
jdbcUrl=jdbc:mysql:///qianxun  
driverClass=com.mysql.jdbc.Driver  
username=root  
password=root


UserDao.java

public interfaceUserDao {  

   void printInfo();  
}
UserDaoImp.java

import java.io.IOException;  
import java.io.InputStream;  
import java.util.Properties;  
public class UserDaoImp implements UserDao{  
         privateString jdbcUrl;  
         privateString driverClass;  
         privateString username;  
         privateString password;  
         /** 
          * 构造方法 
          */  
         publicUserDaoImp(){  
                   //读取配置文件  
                   Stringresource="jdbc.properties";  
                   Propertiesprops=loadProperties(resource);  
                   //初始化信息  
                   jdbcUrl=props.getProperty("jdbcUrl");  
                   driverClass=props.getProperty("driverClass");  
                   username=props.getProperty("username");  
                   password=props.getProperty("password");  
                   //显示信息  
                   printInfo();  
         }  
         /** 
          * 加载配置文件 
          * @param resource 
          * @return 
          */  
         privateProperties loadProperties(String resource){  
                   InputStreaminputStream=null;  
                   try{  
                            inputStream= getClass().getResourceAsStream(resource);  
                            Propertiesprops=new Properties();  
                            props.load(inputStream);  
                            returnprops;  
                   }catch (IOException e) {  
                            thrownew RuntimeException(e);  
                   }  
                   finally{  
                            try{  
                                     inputStream.close();  
                            }catch (IOException e) {  
                                     thrownew RuntimeException(e);  
                            }  
                   }  
         }  
         publicvoid printInfo(){  
                   System.out.println("jdbcUrl= "+jdbcUrl);  
                   System.out.println("driverClass="+driverClass);  
                   System.out.println("username="+username);  
                   System.out.println("password="+password);  
         }  
         publicString getJdbcUrl() {  
                   returnjdbcUrl;  
         }  
         publicvoid setJdbcUrl(String jdbcUrl) {  
                   this.jdbcUrl= jdbcUrl;  
         }  
         publicString getDriverClass() {  
                   returndriverClass;  
         }  
         publicvoid setDriverClass(String driverClass) {  
                   this.driverClass= driverClass;  
         }  
         publicString getUsername() {  
                   returnusername;  
         }  
         publicvoid setUsername(String username) {  
                   this.username= username;  
         }  
         publicString getPassword() {  
                   returnpassword;  
         }  
         publicvoid setPassword(String password) {  
                   this.password= password;  
         }  
          


UserDaoImpTest.java

import org.junit.Test;  

public classUserDaoImpTest {  
   @Test  
   public void testUserDaoImp(){  
      UserDaouserDao=newUserDaoImp();  
   }  
}


2.  工厂模式描述依赖过程
BeanFactory.java
[java] view plaincopyprint?
<span style="font-size:14px;">import java.util.Properties;  
public class BeanFactory {  
         privatestatic Properties props;  
         static{  
                   //模拟读取配置文件  
                   props= new Properties();  
                   props.setProperty("UserDao","cn.itcast.spring.a_helloworld.UserDaoImpl");  
         }  
         /** 
          * 根据配置生成相应实现类的实例 
          * 
          * @param clazz 
          * @return 
          */  
         publicstatic <T>T getBeanInstance(Class<T> clazz) {  
                   try{  
                            StringclassName = props.getProperty(clazz.getSimpleName());  
                            return(T)Class.forName(className).newInstance();  
                   }catch (Exception e) {  
                            thrownew RuntimeException(e);  
                   }  
         }  
}
UserServiceImpl.java
[java] view plaincopyprint?


UserDao;  

public class UserServiceImpl {  
         //private UserDao userDao = new UserDaoImpl();  
         privateUserDao userDao = BeanFactory.getBeanInstance(UserDao.class);  
   
         publicUserServiceImpl() {  
                   System.out.println("所使用的UserDao =" + userDao.getClass());  
         }  
   
         publicvoid setUserDao(UserDao userDao) {  
                   this.userDao= userDao;  
         }  
}


UserServiceImplTest.java

import org.junit.Test;  
public class UserServiceImplTest {  
         @Test  
         publicvoid testUserServiceImpl() {  
                   UserServiceImpluserServiceImpl = new UserServiceImpl();  
         }  
}</span>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值