一:依赖原理
在程序中要分层,且层与层之间要使用接口,就会有如下代码
public class UserServiceImpl {
private UserDao userDao = new MySQLUserDaoImpl();
// ...
}
1. 依赖过程
jdbc.properties
jdbcUrl=jdbc:mysql:///qianxun
driverClass=com.mysql.jdbc.Driver
username=root
password=root
}
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;
}
@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?
//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;
}
}
public class UserServiceImplTest {
@Test
publicvoid testUserServiceImpl() {
UserServiceImpluserServiceImpl = new UserServiceImpl();
}
}</span>
在程序中要分层,且层与层之间要使用接口,就会有如下代码
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>