首页 > 代码库 > Srping框架初识

Srping框架初识

 Spring是一种框架,为企业应用开发提供了一个轻量级的解决方案,包括基于依赖注入的核心机制、基于AOP的声明式事务管理、与多种持久层技术的整合。

    1 什么叫依赖注入?

           A对象需要调用B对象方法的情形即为A对象依赖B对象,普通的做法如下

       首先创建一个UserDao类   

package com.fly.user.dao;public class UserDao {    public void save(){        System.out.println("保存一个用户");    }}

    然后创建一个UserService类,当UserService类需要调用UserDao类里的save方法时即为UserService依赖UserDao

package com.fly.user.service;import com.fly.user.dao.UserDao;public class UserService {    UserDao userDao = new UserDao();        public void userSave(){        userDao.save();    }}

  这种做法耦合度太高,非常不利于项目的维护

那么使用Spring实现UserService如下

package com.fly.user.service;import com.fly.user.dao.UserDao;public class UserService {    private UserDao userDao;        public void userSave(){        userDao.save();    }    public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }        }

这里使用setter放法来注入被依赖的UserDao对象,而不是通过new,那么Spring是怎么实现这种注入的呢?主要通过applicationContext.xml配置文件来实现(文件名可以随便改)

<?xml version="1.0" encoding="UTF-8"?><beans  xmlns="http://www.springframework.org/schema/beans"        xmlns:context="http://www.springframework.org/schema/context"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xmlns:aop="http://www.springframework.org/schema/aop"         xmlns:tx="http://www.springframework.org/schema/tx"         xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"        xsi:schemaLocation="            http://www.springframework.org/schema/beans            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd            ">        <bean id="userService" class="com.fly.user.service.UserService">            <property name="userDao" ref="userDao"></property>        </bean>                <bean id="userDao" class="com.fly.user.dao.UserDao"></bean></beans>

 

 Spring里一切java对象皆为Bean,至于Spring底层如何解析该xml文件需要去读源码以及相关java反射的原理,后续我也会写相关的博文

接下来用一个TestUser类来测试运行型

package com.fly.user;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.fly.user.service.UserService;public class TestUser {    public static void main(String[] args) {        // TODO Auto-generated method stub        @SuppressWarnings("resource")        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");                UserService userService = context.getBean("userService", UserService.class);        userService.userSave();    }}

 

 鼠标右键Run As->Java Application得到如下结果

九月 01, 2016 2:45:11 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1d1c0f9c: startup date [Thu Sep 01 14:45:11 CST 2016]; root of context hierarchy九月 01, 2016 2:45:11 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions信息: Loading XML bean definitions from class path resource [applicationContext.xml]保存一个用户

 这些就是Spring依赖注入的实现,这里用到的Spring的Jar包现在需要到http://repo.spring.io/release/org/springframework/spring/地址下进行下载,还需要commons-logging的jar包,下载地址为http://commons.apache.org/proper/commons-logging/download_logging.cgi  

Spring推荐面向接口编程,后续会优化为面向接口的实现方式

 

Srping框架初识