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推荐面向接口编程,后续会优化为面向接口的实现方式

 

原文地址:https://www.cnblogs.com/flycoding/p/5829887.html