经典三层框架初识(二)---Spring 2.1入门案例1

前面我们简单介绍了一个spring.我们这里主要用spring framew这个框架.主要处理业务逻辑层.我们发现理论恨多,但是其实开发起来代码是很简单的.我们来说一个入门案例.

这里说的入门案例,主要想说下ioc:  控制反转,将对象创建和依赖管理的权限反转给spring容器.这不是第一次强调这个东西了.我们这里再重复一下,就当是强调了.不要嫌我啰嗦.这个思想很重要.

以前我们创建对象都是我们手动人工的new出来,这里呢我们就不需要new了,交给容器,不由我们创建了.对象的生命周期也由容器管理了.我们使用spring后,由于ioc,我们已经将对象的创建和管理的权限交出去了,如果我们需要对象,通过依赖来实现注入,从容器中获取

如果A里面要依赖B,如何实现的呢?这里有下面的一个DI:依赖注入,对依赖的管理  我们在运行过程中,动态实现给它的依赖,实现值的注入

下面介绍一下这个案例的步骤:

  • 创建java项目
    • 导入响应jar包  spring是模块化的,所以只需要导入我们需要的jar包即可,没必要全部导入
      • ioc就是由前面说的第一组来实现的,所以需要核心容器的jar + Commons-logging (日志增强的) 4+1
      • 日志增强的jar包一个是可以去Apache获取,另外一个我们以前mybatis的lib中有
    • 这里我们主要以与数据持久层交互的案例来举例子,但是我们着重要说的是如何用spring框架创建对象和管理
    • UserDao        数据持久层
      • UserDaoImpl
  • ①.我们先写一下传统的,也就是咱们之前的 .下面看一下代码
    • 首先我们在src下创建一个dao的包,创建一个UserDao的接口.像我们之前一样.但是这里我们就是模拟一下,不连接数据库了
      package dao;
      
      public interface UserDao {
      	
      	void addUser();
      	void deleteUser();
      }
      

      然后我们在dao包下,创建一个impl的子包,里面是UserDao接口的实现类UserDaoImpl

    •  

      package dao.impl;
      
      import dao.UserDao;
      
      public class UserDaoImpl implements UserDao {
      
      	@Override
      	public void addUser() {
      		System.out.println("添加用户");
      	}
      
      	@Override
      	public void deleteUser() {
      		System.out.println("删除用户");
      	}
      
      }
      

      这和我们之前一样.我们先来写个测试类.src下创建一个test包,里面创建测试类Test

    •  

      package test;
      
      import dao.UserDao;
      import dao.impl.UserDaoImpl;
      
      public class Test {
      
      	public static void main(String[] args) {
          
                  UserDao dao  =  new UserDaoImpl();
      	    dao.addUser();
      	    dao.deleteUser();
              }
          /*
           *输出结果:
           *添加用户
           *添加用户
           */
      
      }
      
      

      这就是我们之前传统的创建dao和数据交互的模拟.这里我们创建和管理对象的权限都在我们开发者手上,刚才我么说了spring是一个容器,它的ioc是让我们将对象的创建和管理都交给容器那就意味着我们这里创建dao对象,不应该直接new了.应该转变成从spring容器中获取.既然要获取,那spring容器中应该先创建和管理dao对象..如何创建的呢..就是通过配置文件.

    •  

      下面我们来配置一下这个配置文件,在src目录下,我们创建一个applicationContext.xml的配置文件.如下配置

      <?xml version="1.0" encoding="UTF-8"?>
      <!-- 这个文件的名字不是一定要叫这个,而是习惯性都叫这个而已 ,在这里面我们来配置一下这个spring容器
      	 那如何配置呢?我们还是要参考一下开发指南.
      	 xsd是什么呢?以前我们说过约束文件一种是dtd,还有一种是schema.这个约束它的后缀名字就是xsd
      	 发开指南The equivalent file in the XML Schema-style would be…这局下面的约束我们copy到下面
      	 用下面这些约束来约束beans这个标签里面的标签有什么和如何写
      -->
      <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="
              http://www.springframework.org/schema/beans 
              http://www.springframework.org/schema/beans/spring-beans.xsd">
      
          <!-- 一个bean标签代表配置管理一个对象,这里我们要用bean来创建和管理UserDao的对象 
          	id:这个对象的唯一标识
          	class:类的完全限定名称
          -->
      	<bean id="userdao" class="dao.impl.UserDaoImpl"></bean>
      	
      	<!--这里要注意,上面class中传入的是实现类的对象,因为既然要帮我们创建对象,
                 我们传入个接口,接口不能创建对象.肯定是不行的
              -->
      </beans>
      

      此时我们回到测试类:用spring工厂模式创建对象.

    •  

      package test;
      
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      import dao.UserDao;
      
      public class Test {
      
      	public static void main(String[] args) {
      		/*
      		 * 刚才我们已经在配置文件中配置了让spring容器帮我们创建对象,我们这里要拿到这个对象
      		 */
      		//这个spring ioc容器实际上就是ApplicationContext,加载上线问来获取这个容器对象
      		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
      		//从容器中取对象,那容器中有很多对象的话,通过什么来取呢?就是我们前面<bean>标签里面的id
      		//ApplicationContext 的getBean(String name,Class<T> requiredType)
      		//name就是<bean>中的id;requiredType 是返回对象的类型
      		UserDao dao = ac.getBean("userdao", UserDao.class);
      		dao.addUser();
      		dao.deleteUser();
      	}
      
      }
      

      输出结果:

    • 十月 26, 2018 9:14:47 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
      信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@7e6cbb7a: startup date [Fri Oct 26 21:14:47 CST 2018]; root of context hierarchy
      十月 26, 2018 9:14:47 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
      信息: Loading XML bean definitions from class path resource [applicationContext.xml]
      添加用户
      删除用户

       这样我们就实现了用spring工厂模式创建我们需要对象.我们发现,我们没有再手动new我们需要的对象了,而是用方法调用的模式来实现的.这样耦合就变低了.

       

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值