Spring框架学习(1)初学者学习

前言

记录自己的学习历程

认识Spring框架

逻辑层开发的流行框架Spring
特点:

  1. 非侵入性
    Spring框架的API不会在业务逻辑上出现
    对于应用来说,能将业务逻辑从当前应用中剥离出来
    针对框架来说,业务逻辑可言从Spring框架快速移植到其他框架

  2. 容器
    容器功能可以管理对象的生命周期、对象间的依赖关系
    可以写一个配置文件(xml文件)定义对象的名字、是否为单例、设置与其他对象的依赖关系

  3. IOC
    控制反转,即依赖关系的转移,如果以前是依赖实现,现在反转为依赖于抽象,核心思想是面对接口编程

  4. 依赖注入
    对象与对象之间依赖关系的实现

  5. AOP(面对切面编程)
    将日志、安全、事务管理等服务理解成一个“切面”,可以实现复用,将切面动态插入业务逻辑中,让业务逻辑能够方便使用切面提供的服务
    具体内容解释:大佬的Spring教学

Spring框架的内容

  1. Spring Core作为依赖注入容器的部分
  2. Spring AOP声明式事务
  3. Spring ORM对Hibernate等持久层框架提供支持
  4. Spring Context为企业级开发提供了便捷和集成的工具
  5. Spring Web为Web应用程序开发提供支持

简单应用

1.在IDEA中创建项目
在这里插入图片描述
2.简单应用
(1)HelloWorld类

package com;

public class HelloWorld {
    private String userName;
    public void setUserName(String userName){
        this.userName=userName;
    }
    public void show(){
        System.out.print(userName+":欢迎学习Spring");
    }
}

(2)applicationContext.xml
通过bean元素实例化Helloworld类,id属性标识实例名helloworld,class属性指定待实例化的全路径类名,property为类属性赋值

<?xml version="1.0" encoding="UTF-8"?>
<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 id="helloworld" class="com.HelloWorld">
        <property name="userName" value="zhangsan"></property>
    </bean>

(3)测试类TestHelloWorld

package com.show;

import com.HelloWorld;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestHelloWorld {
    public static void main(String [] args){
        //加载xml配置
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获得配置中的实例
        HelloWorld helloWorld=(HelloWorld)ctx.getBean("helloworld");
        //调用方法
        helloWorld.show();
    }
}

(4)测试
在这里插入图片描述

理解Spring核心机制:依赖注入/控制反转

(1)当java实例需要另一个java实例时,传统方法是调用者来创建被调用者的实例(new获得实例),采用依赖注入,被调用者的实例由Spring容器来完成,然后注入调用者
(2)面向接口编程:定义组件接口,独立开发各个组件,根据组件的依赖关系组装运行

实例理解(一个简单的登录验证)

(1)创建一个接口UserDao

package com.Dao;

public interface UserDao {
    public boolean login(String loginName,String loginPwd);
}

(2)接口UserDao的实现类UserDaoImpl
用户名为admin,密码为123456就登录成功

package com.Dao.Impl;

import com.Dao.UserDao;

public class UserDaoImpl implements UserDao {
    @Override
    public boolean login(String loginName, String loginPwd) {
        if (loginName.equals("admin")&&loginPwd.equals("123456")){
            return true;
        }
        else return false;
    }
}

(3)Service层
用Service接口就是为了解耦,解耦说的意思是更改某一层代码,不会影响其他层代码,即面向接口编程
Service类封装业务流程,DAO类封装对持久层的访问
最终项目表现为表示层调用控制层,控制层调用业务层,业务层调用数据访问层

package com.Dao.Service;

public interface UserService {
    public boolean login(String loginName,String loginPwd);
}

(4)创建接口UserService的实现类UserServiceImpl

package com.Dao.Impl;

import com.Dao.Service.UserService;
import com.Dao.UserDao;

public class UserServiceImpl implements UserService {
    UserDao userDao;
    public void setUserDao(UserDao userDao){
        this.userDao=userDao;
    }

    @Override
    public boolean login(String loginName, String loginPwd) {
       return userDao.login(loginName,loginPwd);
    }
}

在上述代码中没有采用传统的new UserDaoImpl()的方式获取数据访问层UserDaoImpl类的实例,只用了UserDao接口声明了对象userDao,并添加了set()方法,用于依赖注入
UserDaoImpl类的实例化和对象UserDao的注入在xml中完成
(4)配置xml文件
用bean标记配置相关属性

	<!--创建userDapImpl的实例-->
    <bean id="userDao" class="com.Dao.Impl.UserDaoImpl">
    </bean>
    <!--配置UserServiceImpl的实例-->
    <bean id="userService" class="com.Dao.Impl.UserServiceImpl">
        <!--依赖注入数据访问层组件-->
        <property name="userDao" ref="userDao"></property>
    </bean>

bean元素创建了UserDaoImpl的实例
另一个bean元创建了UserServiceImpl的实例,使用property的name属性设置为userDao,代表UserServiceImpl类中userDao属性需要注入值,通过ref或value指定,ref表示对IOC容器中某个bean实例的引用,这里引用了UserDaoImpl的实例
(5)测试类(TestLogin)

package com.show;

import com.Dao.Service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestLogin {
    public static void main(String[] args){
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml ");
        //获取配置中UserServiceImpl的实例
        UserService userService=(UserService)ctx.getBean("userService");
        boolean flag=userService.login("admin","123456");
        if(flag){
            System.out.print("登录成功");
        }
        else System.out.print("登录失败");
    }
}

可以得到结果:
在这里插入图片描述
在测试类中,通过ClassPathXmlApplicationContext类加载Spring配置文件xml,从配置文件中获得UserServiceImpl类的实例,最后调用login()方法,运行测试类,控制台输出

发布了8 篇原创文章 · 获赞 0 · 访问量 168

猜你喜欢

转载自blog.csdn.net/key_768/article/details/103916225
今日推荐