zoukankan      html  css  js  c++  java
  • 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推荐面向接口编程,后续会优化为面向接口的实现方式

     

  • 相关阅读:
    C# WinForm开发系列 OpenSource Controls
    Jenkins_FileCenter_Deploy
    DatabaseOperation_DBM Kill inactive connection
    如何在linux下检测内存泄漏
    基本数据类型
    Linux Kernel Makefiles
    让GCC编译关键字“__attribute__”给你带来方便
    内核空间和用户空间
    程序人生--一个程序员对学弟学妹建议
    arm linux
  • 原文地址:https://www.cnblogs.com/flycoding/p/5829887.html
Copyright © 2011-2022 走看看