Spring学习入门

本文介绍了Spring作为全栈轻量级Java框架的基本概念,包括三层架构的开发步骤(Dao、Service、Web层),强调了IoC(控制反转)的重要性,并通过工厂模式和XML配置文件展示了如何解耦代码。通过一步步的示例,阐述了Spring如何通过配置文件管理对象,实现了依赖注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 介绍

Spring是于2003 年兴起的一个full-stack轻量级的Java 开源框架,由Rod Johnson创建 full-stack:全栈。表现层(springMVC)、业务层(事务管理  spring ioc)、持久层(spring JdbcTemplate)等,还能 与市面上主流的其他框架(struts1、struts2、mybatis、jpa、Hibernate等)进行整合。 轻量级:占用的资源相对较小。对比着JavaEE(EJB重量级)来讲的。 b、Spring以IOC(控制反转)和AOP (面向切面编程)为核心

Spring 使用使用对象类 即Bean 的管理

* web层:springMVC 表现层

* service层:  spring ioc 业务层

* dao层:spring jdbcTemplate 持久层

(目前我的理解就是MVC模式 将业务逻辑处理与数据获取 展示进行分割 解耦和  表现层调用业务层、业务层调用持久层)

二 (理解)利用工厂解耦

2.1 首先三层架构开发 (在idea中先搭建Maven 在創建Spring,可參考

https://blog.youkuaiyun.com/gxflh/article/details/109025091

step1 Dao层

编写Dao层

package com.itheima.dao;

public interface UserDao {

void saveUser();

}

编写dao实现 

package com.itheima.dao.impl;

import com.itheima.dao.UserDao;

public class UserDaoImpl implements UserDao {

public void saveUser() {

System.out.println("Dao执行了saveUser方法");

} }

step 2 Service层

编写业务接口

package com.itheima.service;

public interface UserService {

void regist();

}

编写业务实现

package com.itheima.service.impl;

import com.itheima.dao.UserDao;

import com.itheima.dao.impl.UserDaoImpl;

import com.itheima.service.UserService;

public class UserServiceImpl implements UserService {

private UserDao userDao = new UserDaoImpl();

public void regist() { userDao.saveUser();

} }

step3 Web层

编写表现层:此处用单元测试

package com.itheima.test; import com.itheima.service.UserService;

import com.itheima.service.impl.UserServiceImpl;

import org.junit.Test;

public class UserServiceTest {

private UserService userService = new UserServiceImpl();

@Test public void testRegist(){ userService.regist();

} }

以上存在的问题

开闭原则:

开:支持扩展。 闭:已经存在的代码如果已经运行了,不能修改。

UserServiceImpl中要想切换Dao的实现,目前需要修改源代码(在运行期间是不可取的)。

解决办法:使用工厂设计模式

使用:

如果要更换dao的实现,还是需要修改工厂源码的。(Server具体依赖Dao,转嫁到了工厂中) 

 

 

改进(将Factory中的GetUserDao方法替换成xml 配置文件加载持久层不同对象 通过dom解析过去不同持久层对象的方法):

step1、建立一个xml配置文件(Resources目录下)  User.xml 这文件是在自己创建工厂的情况下使用的配置 在工厂使用中

// List<Node> nodes=document.selectNodes("/beans/bean");这个地方使用到了

step2、修改工厂

  step2.1导入dom4j的坐标

  1. <dependency>

  2. <groupId>dom4j</groupId>

  3. <artifactId>dom4j</artifactId>

  4. <version>1.6.1</version>

  5. </dependency>

  6. <dependency>

  7. <groupId>jaxen</groupId>

  8. <artifactId>jaxen</artifactId>

  9. <version>1.1.6</version>

  10. </dependency>

  step2.2修改工厂 ,工厂的作用:创建对象,隐藏对象的创建细节

public class UserFactory {
    //
    private static Map<String,Object> userContainer=new HashMap<String, Object>() ;
    //
    static {
        // 加載Bean 文件
        InputStream in=UserFactory.class.getClassLoader().getResourceAsStream("User.xml");
        //
        SAXReader saxReader=new SAXReader();
        try {
            //
            Document document=saxReader.read(in);
            //
            List<Node> nodes=document.selectNodes("/beans/bean");
            //
            for (Node n : nodes){
                //
                String id=n.valueOf("@id");
                //
                String className=n.valueOf("@class");
                //
                userContainer.put(id,Class.forName(className).newInstance());
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
    //从容器中查找指定名称的对象
    public static Object getBean(String name){
        return userContainer.get(name);
    }
    //获取对象:泛型(选看)
    public static <T> T getBean(String name,Class<T> clazz){
        return (T)userContainer.get(name);
    }
}

但是自己写工厂模式使用局限性太大,一个项目中 Mybaits Spring 可能公用一个工厂模式,此时局限性就体现出了。在此情况先 我们就借用Spring核心配置文件,将配置文件中配置的对象存放到一个容器中,使用对象从容器中根据名字查找即可。

下面则使用Spring 配置文件使用封装处理好的BeanFactory文件

3. (重要)Ioc的总结 IoC:Inverse Of Control反转控制。实际就是指控制权发生了转移(由自己空转转为被动接受)。借助 配置文件,将配置文件中配置的对象存放到一个容器中,使用对象从容器中根据名字查找即可。

 

 

 

下面开始IOC入门的事件练习(重点)spring的ioc入门案例

4.1. 搭建开发环境 step1、建立一个新的模块

idea 创建maven项目 在添加Spring

step2、导入核心坐标

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>compile</scope>
</dependency>

step3、在resource文件夹下建立一个spring的核心配置文件 (右击建立的Maven项目 如图所示)

step4、建立dao接口

package user.dao.Interface;

public interface UserDaoInterface {
    void saveUser();
}

step5、建立dao的实现类

package user.dao.Impl;

import user.dao.Interface.UserDaoInterface;

public class UserDaoImpl implements UserDaoInterface {
    public void saveUser() {
        int i=0;
        i=+i;
        System.out.println("打印数据i"+i);
    }
}

step6、在配置文件中配置dao

step7、初始化spring容器

接下来就是单元测试就行了

其他配置参考我上传的Spring学习文件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值