美文网首页
高级第一天:Spring

高级第一天:Spring

作者: w漫漫 | 来源:发表于2020-09-01 22:24 被阅读0次

主要内容

1.Spring框架的简介

2.Spring的环境搭建和IOC引入

3.创建Bean对象的方式

4.DI的使用

5.DI的实现的三种方式

一.Spring框架的简介

1.为什么使用Spring框架

问题:

[1]使用mybatis结合servlet的使用的时候,书写的代码业务层相对比较的麻烦

[2]目前书写的代码层和层之间的耦合性比较高

[3]目前书写的代码后期的扩展性比较低

2.解决方案

使用Spring解决 Spring是解决了业务层和其他各层之间的耦合(高内聚,低耦合)

3.Spring框架简介

A.Spring,春天.Spring框架在开发中的角色是用于管理其他的框架和对象.换句话说,Spring可以使已有的技术更好用.

B.Spring之父.Rod Johnson

C.轮子理论,不要重复发明轮子

D.关于版本.在spring3之前,spring只提供一个jar,spring.jar;从spring3之后,官方对spring做了拆分,分成了多个jar包(spring-aop,spring-beans,spring-context,spring-expression,spring-core,spring-jdbc,spring-tx,spring-web,spring-webmvc等)

E.Jar包和源码的下载地址

http://github.com/spring-projects/spring-framework/tags

https://repo.spring.io/libs-release-local/org/springframework/spring/

F.学习Spring的主要内容:

a)IOC/DI:控制反正/依赖注入

b)AOP:面向切面编程

c)TX:声明式事务

4.介绍Spring Framework Runtime

Spring Framework Runtime图解

A.Test

对应spring-test.jar.Spring提供的测试工具,可以整合Junit测试,简化测试环节

B.Core Container

Spring的核心组件,包含了Spring框架最基本的支撑

Beans,对应spring-beans.jar.Spring进行对象管理时依赖的jar包

Core,对应spring-core.jar,Spring核心jar包

Context,对应spring-context.jar,Spring容器上下文对象

SpEL,对应spring-expression.jar,Spring表达式语言

C.AOP

面向切面编程,对应spring-aop.jar

D.Data Access

Spring对数据访问层的封装

JDBC,对应spring-jdbc.jar.Spring对jdbc的封装,当需要使用spring连接数据库时使用.spring-jdbc.jar需要依赖spring-tx.jar

Transactions,对应spring-tx.jar.事务管理

ORM,对应spring-orm.jar.spring整合第三方orm框架需要使用的jar包,例如Hibernate框架

E.Web

Spring对javax下的接口或类做的扩展功能.

spring-web.jar,对Servlet,filter,Listener等做的增强.

spring-webmvc.jar,实际上就是SpringMVC框架,需要一阿里spring环境和spring-web.jar

二.搭建Spring基础环境

1.责任链

我们在使用MVC进行开发的时候数据在各层之间进行传递,数据传递的时候在业务上形成一个链条,这个链条称之为责任链

2.基于责任链模式开发的缺点:

层和层之间的相互调用造成了耦合性比较高

3.解决方案

Spring IOC:控制反转

Inversion of Control

作用:帮助我们创建对象的

理解示意图

4.代码实现步骤

A/创建项目并导包

创建java工程,导入jar包

spring核心jar包:4个

日志包:commons-logging.jar,被spring-core.jar所依赖.

B.提供配置文件

配置文件要求是一个xml文件.命名没有要求,位置没有要求.一般这个文件会放在src下,命名为applicationContext.xml

<?xml version="1.0" encoding="UTF-8">

<!--

    xmlns:xml namespace,当前配置文件默认使用哪个命名空间

    xmlns:xsi xml schema instance,schena 约束规范的提供者

    xsi:schemaLocation schema约束文件的地址,值的表示方式为:key:value

        key是一个标识

        value是xsd文件的url地址

-->

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

<!--Spring管理User对象-->

<bean class="com.bjsxt.pojo.User" id="user"/>

</beans>

C.编写测试代码

public class TestSpring{

    public static void main(String[] args){

        //Ctrl+h:Hierarchy面板,层级展示当前类(接口)的结构

        //Ctrl+Alt+b:查看当前接口下的所有子接口和实现类

        //加载Spring配置文件,得到Spring容器对象

        ApplicationContext context = 

new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

        //从容器中获取需要的对象

        Useruser= context.getBean("user",User.class);

        System.out.println(user);

        User user2 = context.getBean("user",User.class);

        System.out.println(user==user2);//true

    }

}

5.总结

A.IOC实现的好处

实现代码之间的解耦

B.IOC:控制反转

控制:创建对象的过程

反转:创建对象的操作本身是程序员自己完成的,现在反交给Spring进行创建

三.Spring创建对象的几种方式

1.通过构造器创建对象

无参构造器.默认Spring会使用无参构造器创建对象

2.有参构造器

可以在<bean>下通过<constructor-arg>标签指定使用有参构造器创建对象.属性介绍:

index:索引,从0开始,表示参数的索引位置

name:名称,表示参数的名称

type:类型,表示参数的类型

value:赋值,当值是简单类型时可以使用.基本类型,包装类型,String,resource,class

ref:(reference)赋值.当值为非常简单类型时使用,表示需要应用一个<bean>

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

<!--Spring管理User对象-->

<bean class="com.bjsxt.pojo.User" id="user">

    <constructor-arg name="id" index="0" type="java.lang.Integer" value="123"/>

    <constructor-arg name="name" index="1" type="java.lang.String" value="张无忌"/>

</bean>

</beans>

3.通过工厂创建对象

[1]实例对象.需要先创建工厂对象,然后调用指定的方法创阿金目标对象

<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="factory" class="com.bjsxt.factory.UserFactory1"/>

    <!--通过实例工厂创建目标对象-->

    <beans id="user" factory-bean="factory" factory-method="getInstance">

</beans>

[2]静态工厂,直接通过工厂类调用静态方法就可以创建目标对象

<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="user" class="com.bjsxt.factory.UserFactory2" factory-method="getInstance"/>

</beans>

第四节 DI依赖注入

1.为什么使用DI9(依赖注入)

作用:给对象中的全局属性或者对象进行赋值的操作

2.利用DI进行解决

1.英文全称(Dependency Injection)

2.中文名称:依赖注入

2.1依赖:一个类在另一个类中作为全局属性时

2.2注入:通过外部给自己属性(或其他内容)进行赋值

3.类与类之间的关系:

3.1继承 实现 依赖 关联 聚合 组合

3.2 关系强度:组合>聚合>关联>依赖

4.DI的意义

解除类与类之间高耦合性,给对象中全局对象赋值的操作

Spring帮助创建对象的过程叫做IOC,创建对象是给对象中全局对象赋值叫做DI,所以认为IOC和DI是同一个事情.

五.依赖注入的几种方式

1.有参构造

<!--[A]使用有参构造器进行值的注入-->

<!--value和ref的使用场景

    如果给基本数据类型+String注入值的时候使用value

    如果给对象注入值的时候 使用ref

-->

<bean id>

    <constructor-arg name="cno" value="1"></sonstructor-arg>

    <constructor-arg name="cname" value="s106java"></constructor-arg>

</bean>

<bean id="stu" class="com.bjsxt.spring01.Student">

    <constructor-arg name="age" value="18"></constructor-arg>

    <constructor-arg name="name" value="zs"></constructor-arg>

    <constructor-arg name="sex" value="男"></constructor-arg>

    <constructor-arg name="clazz" ref="cla"></constructor-arg>

</bean>

2.SET方法

<!--[B]使用set方法进行值的注入-->

<bean id="stu" class="com.bjsxt.spring01.Student">

    <property name="sex" vlaue="男"></property>

    <property name="age" value="18"></property>

    <property name="name" value="zs"></property>

    <property name="clazz" ref="cla"></property>

</bean>

3.设置值自动注入

<!--[C]自动注入

    autowire的可选择值

    *底层调用的都是set方法

    byName:查找方式 整个配置文件中查询[bean标签的ID名称]和[注入实体类中的属性名]一致的话,就完成自动注入

    byType:查找方式 整个配置文件中查询[bean标签类型]和[注入实体类中的属性类型]一致的话,就完成自动注入

    *底层走的是构造器

    constructor:收钱根据bean标签的ID名称进行匹配,如果没有对应的值,再根据bean的类型进行匹配

-->

<bean id="stu" class="com.bjsxt.spring01.Student" autowire="constructor"></bean>

4.其他值注入

public class User{

    private String[] arr;

    private List<String> list;

    private Set<String> set;

    private Map<String,String>map;

}

<!--特殊值的注入-->

<bean id="user" class="com.bjsxt.spring02.User">

    <!--给数组进行值的注入-->

    <property name="arr">

        <array>

            <value>A</value>

            <value>B</value>

            <value>C</value>

        </array>

    </property>

<!--list集合进行值注入-->

<property name="list">

    <list>

        <value>A</value>

        <value>B</value>

        <value>C</value>

    </list>

</property>

<!--Set集合的赋值-->

<property name="set">

    <set>

        <value>A</value>

        <value>B</value>

        <value>C</value>

        <value>A</value>

    </set>

</property>

<!--Map集合赋值-->

<property name="map">

    <map>

        <entry>

            <key><value>A</vlaue></key>

            <value>bjsxt</value>

        </entry>

        <entry>

            <key><value>B</value></key>

            <value>bjsxt</value>

        </entry>

    </map>

</property>

</bean>

相关文章

网友评论

      本文标题:高级第一天:Spring

      本文链接:https://www.haomeiwen.com/subject/rwhbsktx.html