1、spring入门(spring笔记)

一、为什么要使用spring

这里我们通过一个示例进行说明(工程pring_whyspring
首先我们完成dao层:
UserDao.java

package com.bjsxt.spring.dao;
public interface UserDao {
    public void save(String username, String password);
}

而dao层有两种实现,一种是MySQL实现,一种是Orecla实现。
UserDao4MySqlImpl.java

package com.bjsxt.spring.dao;
public class UserDao4MySqlImpl implements UserDao {

    public void save(String username, String password) {
        System.out.println("--------UserDao4MySqlImpl.save()-------");
    }
}

UserDao4OracleImpl.java

package com.bjsxt.spring.dao;
public class UserDao4OracleImpl implements UserDao {

    public void save(String username, String password) {
        System.out.println("--------UserDao4MySqlImpl.save()-------");
    }
}

在看业务层:
UserManager.java

package com.bjsxt.spring.manager;
public interface UserManager {
    
    public void save(String username, String password);
}

实现:
UserManagerImpl.java

package com.bjsxt.spring.manager;
import com.bjsxt.spring.dao.UserDao;
public class UserManagerImpl implements UserManager {
    
    private UserDao userDao;
    
    public UserManagerImpl(UserDao userDao) {
        this.userDao = userDao;
    } 
    
    public void save(String username, String password) {
        this.userDao.save(username, password);
    }
}

使用一个用例进行测试:
Client.java

package com.bjsxt.spring.client;
import com.bjsxt.spring.dao.UserDao4MySqlImpl;
import com.bjsxt.spring.dao.UserDao4OracleImpl;
import com.bjsxt.spring.manager.UserManager;
import com.bjsxt.spring.manager.UserManagerImpl;

public class Client {

    public static void main(String[] args) {
        //UserManager userManager = new UserManagerImpl(new UserDao4OracleImpl());
        UserManager userManager = new UserManagerImpl(new UserDao4MySqlImpl());
        userManager.save("张三", "123");
    }
}

说明:在使用的时候上面我们选择了使用MySQL数据库,那么我们在实例化业务对象的时候就要将MySQL的dao层实现传递进去。那如果我们如果要使用Oracle数据库,那么就要将Orecla的dao层实现传递进去,这就需要改动业务类。这里就会有一个问题,如果当我们的数据库系统较多,同时数据库的相关依赖很多的时候,如果我们想在不同的数据库之间进行切换,那么需要改动的地方就会很多,也就是系统的移植性很差。下面我们将这个工程使用spring进行改造。

二、spring入门

下面我们对上面的例子使用spring进行改造(工程spring_beginning

  • 1.这里我们使用spring2,首先导入或引入相关的jar包,这里我们只导入三个包:
    核心包:SPRING_HOME/dist/spring.jar
    日志依赖包:SPRING_HOME/lib/jakarta-commons/commons-logging.jarSPRING_HOME/lib/log4j/log4j-1.2.14.jar

  • 2.拷贝spring的配置文件applicationContext.xml到src下




           
    
    
    
    
        
        
         
    

  • 3.拷贝log4j配置文件到src下

  • 4.在UserManagerImpl中提供构造函数或setter方法,spring将实例化好的UserDao实现注入给我们

package com.bjsxt.spring.manager;
import com.bjsxt.spring.dao.UserDao;
public class UserManagerImpl implements UserManager {
    
    private UserDao userDao;
    
    /*public UserManagerImpl(UserDao userDao) {
        this.userDao = userDao;
    }*/ 
    
    public void save(String username, String password) {
        this.userDao.save(username, password);
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}
  • 5.让spring管理我们的对象创建和依赖,必须在spring配置中进行定义
    ```````
    同时在使用构造方法和settter方法时的配置是不一样的。这里相关的配置我们在上面已经给出了。

  • 6.编写客户端

Client.java

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
UserManager userManager = (UserManager) factory.getBean("userManager");
        
userManager.save("张三", "123");

说明:

  • 1.对于业务层,我们需要相关的dao层支持,这里将业务类UserManagerImpl交给spring进行管理,而我们在配置文件中配置了业务层需要dao层的支持,同时在类中提供了相关的setter方法,那么spring会将相关的dao实现实例化之后注入给业务层。
  • 2.对于上面的注入dao层实现,那么dao层实现也必须交给spring进行管理,于是我们也需要配置。
  • 3.对于业务层需要用到哪个dao层实现则只需要在配置文件中注明即可。
  • 4.在使用的时候我们首先读取配置文件,然后直接找spring获取业务实现即可。

spring IOC容器注入的关键点:

  • 必须将被管理的对象定义到spring配置文件中
  • 必须定义构造函数或setter方法,让spring将对象注入过来

最后:这里我们发现使用spring进行管理非常方便,同时项目变动需要改动的东西也不多。当然这里是使用的配置文件,我们也可以使用注解进行配置。

你可能感兴趣的:(1、spring入门(spring笔记))