java spring入门_Java学习之Spring框架入门篇

Java学习之Spring框架入门篇

0x00 前言

最近在学SSM的三大框架,上篇文章,已经更新了Mybatis的相关内容,那么这篇文章就来写写Spring的入门。

0x01 Spring 概述

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。

它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。

0x02 Spring使用的意义

首先我们来看一段代码。

dao接口:

package com.test.dao;

public interface userdao {

void select();

}

mysqldaoimpl:

package com.test.dao;

public class mysqldaoimpl implements userdao{

public void select() {

System.out.println("mysqldaoimpl");

}

}

mssqldaodimpl:

package com.test.dao;

public class mssqldaoimpl implements userdao {

public void select() {

System.out.println("mssqlselect ");

}

}

test类:

package com.test.domain;

import com.test.dao.mysqldaoimpl;

import com.test.dao.userdao;

public class test1 {

public static void main(String[] args) {

userdao mysqldaoimpl = new mysqldaoimpl();

mysqldaoimpl.select();

}

}

具体的实现就不写了,这里只是演示一下区别。

这里写了一个接口代表某一个查询方法,然后写了2个实现类,分别是mysql的连接和mssql的连接查询。

我们可以注意到,我们在test类里面想要调用mysql的方法就直接new了一个实现类的对象,那么如果在后面想要mssql的查询的话,就需要修改代码,这样的代码效率不高,而且在后面代码如果多了也不好改了。而且这样写的话控制权全在开发者手里,而不是在用户的手里,要实现什么样的功能控制权应该是在用户手里,而不是开发者手里。

那么这里就可以用到 Spring框架,来实现。虽然是也有其他办法能解决这个问题,但是实现起来代码比较繁琐,那么我们为什么不用更加简单便捷的方法呢?

0x03 Spring 使用

首先也还是配置一下spring的坐标。

org.springframework

spring-web

5.2.7.RELEASE

配置完成后,就来配置一下我们的xml文件。

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">

test类:

package com.test.domain;

import com.test.dao.userdao;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test1 {

public static void main(String[] args) {

ApplicationContext cl = new ClassPathXmlApplicationContext("bean.xml"); //传入xml文件

userdao mysqldaoimpl = (userdao)cl.getBean("mysqldaoimpl"); //获取mysqldaoimpl方法

mysqldaoimpl.select();//调用mysqldaoimpl方法

}

}

配置并直接传入xml文件,并获取一下方法,就可以直接来调用方法就可以使用了。无需在new实现类的实例化对象。

Bean标签详解:

作用:

用于配置对象让 spring 来创建的。

默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。

属性:

id: 给对象在容器中提供一个唯一标识。用于获取对象。

class: 指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。

*scope: 指定对象的作用范围。

* singleton :默认值,单例的.

* prototype :多例的.

* request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.

* session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.

* global session :WEB 项目中,应用在 Portlet 环境.如果没有 Portlet 环境那么

*globalSession 相当于 session.

*init-method: 指定类中的初始化方法名称。

*destroy-method: 指定类中销毁方法名称。

0X04 依赖注入

bean对象的创建来于容器,bean对象中的所有属性,都有容器来注入。下面来看看常用的几种注入方式

构造注入

构造注入:顾名思义,就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置

的方式,让 spring 框架来为我们注入。

首先定义一个实体类:

package com.test.doamin;

import java.util.Date;

public class Perpon {

private String name;

private Integer age;

public Perpon() {

}

@Override

public String toString() {

return "Perpon{" +

"name='" + name + '\'' +

", age=" + age +

", date=" + date +

'}';

}

public Perpon(String name, Integer age, Date date) {

this.name = name;

this.age = age;

this.date = date;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public Date getDate() {

return date;

}

public void setDate(Date date) {

this.date = date;

}

private Date date;

}

在平时我们都是直接在new的时候,或者是使用set方式对他进行赋值,那么在spring框架下,只需要配置一下xml文件就可以对他进行构造器的注入了。

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">

test类:

public static void main(String[] args) {

ApplicationContext cl = new ClassPathXmlApplicationContext("bean.xml"); //传入xml文件

Perpon person = (Perpon) cl.getBean("person");

System.out.println(person);

}

}

注意事项:

类中需要提供一个对应参数列表的构造函数。

然后我们就可以看到执行结果了。

Perpon{name='xiaoming', age=18, date=Sun Aug 30 05:32:35 CST 2020}

把person打印出来,这里看到这些成员变量都被赋值了,是由我们框架去完成的。

constructor-arg标签属性:

index:指定参数在构造函数参数列表的索引位置

type:指定参数在构造函数中的数据类型

name:指定参数在构造函数中的名称

value:它能赋的值是基本数据类型和 String 类型

ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean

Set 注入

property标签属性:

name:找的是类中 set 方法后面的部分

ref:给属性赋值是其他 bean 类型的

value:给属性赋值是基本数据类型和 string 类型的

实际开发中,此种方式用的较多。

0x05 结尾

在前面看到这个东西其实是懵的,后来看着看着发现其实还是挺简单的,大部分都是一些概念上的东西比较难以理解,但是一般框架使用都比较简单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值