Spring入门学习(一)

Spring

Spring的优点

  • Spring是一个开源的免费的框架(即容器)!
  • Spring是一个轻量级的、非入侵式的框架!
  • 控制反转(IOC),面向切面编程(AOP)!
  • 支持事务的处理,对框架整合的支持!

结论:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!

官网:https://spring.io/

根据下面的步骤进入帮助文档

页面网址:https://docs.spring.io/spring/docs/5.2.3.RELEASE/javadoc-api/

IOC本质

控制反转IOC(Inversion of Controller),是一种设计思想,DI(依赖注入)是实现IOC的一种方法,也有人认为DI知识IOC的另一种说法,没有IOC的程序中,我们使用面向对象编程,对象的创建于对象间的依赖关系完全硬编码在程序中,对象的创建有程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓的控制反转就是:获得依赖对象的方式反转了。

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式吗。在Spring中实现控制反转的是IOC容器,其实现方式是依赖注入(Dependency Injection,DI)。

编写第一个HelloSpring程序

1、导入Spring相关jar包

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.1.9.RELEASE</version>
    </dependency>

导入spring-webmvc后idea会自动导入其他的相关的依赖

也可以手动导入!

2、编写一个Hello实体类

package com.star.pojo;

public class Hello {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("Hello"+name);
    }
}

3、编写配置文件(参考文档)

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--bean就是java对象 , 由Spring创建和管理
        id:类对应对象的名字
        class:对应的类(写包名)
        property:字段标签
                    name:属性名
                    value:属性对应的值
    -->
    <bean id="hello" class="com.star.pojo.Hello">
        <property name="name" value="Spring"/>
    </bean>

</beans>

4、接下里就可以进行测试了

import com.star.pojo.Hello;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {

    @Test
    public void helloTest(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//对应的配置文件
        Hello hello = (Hello) context.getBean("hello");//调用getBean方法获得该类对象,参数就是配置文件里面的设置的类的id
        hello.show();//调用方法完成测试
    }
}

测试结果:

可以看到这相当于下面的代码

    Hello hello = new Hello();
    hello.setName("Spring");
    hello.show(name);

Hello对象是由Spring创建,对象的属性有Spring容器设置,这个过程就叫控制反转

控制:传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的;

反转:程序本身不创建对象,而变成被动的接受对象;

依赖注入:就是利用set方法来进行注入的;

IOC是一种由主动的编程变成被动的接收;

使用Spring后,我们彻底不用在程序中取改动了,要实现不同的操作,只需要在配置文件中进行修改,所谓的IOC,其实就是:对象由Spring来创建,管理,装配!

IOC创建对象的方式

1、使用无参构造创建对象

编写一个实体类User

package com.star.pojo;

public class User {

    private String name;

    public void User(){
        System.out.println("对象创建了!")
    }

    public void setName(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("name="+name);
    }
}

配置文件

    <bean id="user" class="com.star.pojo.User">
        <property name="name" value="star"/>
    </bean>

测试

    @Test
    public void userTest(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("============================");
        User user = (User) context.getBean("user");
        user.show();
    }

测试结果:

2、使用有参构造创建对象

编写实体类

package com.star.pojo;

public class User {

    private String name;

    public User(String name) {
        this.name = name;
    }

    public void show() {
        System.out.println("name="+name);
    }
}

配置文件有三种写法(使用标签):

1、下标赋值

<bean id="user" class="com.kuang.pojo.User">
    <constructor-arg index="0" value="张三"/>
</bean>

2、类型赋值

<bean id="user" class="com.kuang.pojo.User">
    <constructor-arg type="java.lang.String" value="李四"/>
</bean>

3、参数名赋值

<bean id="user" class="com.kuang.pojo.User">
    <constructor-arg name="name" value="王五"/>
</bean>

测试代码不变

测试结果:

结论:在配置文件加载的时候,容器中管理的对象就已经初始化了!

原文地址:https://www.cnblogs.com/lmx-181028/p/12354641.html