Spring学习之路1

Spring 框架

简介

Spring框架是由于软件开发的复杂性而创建的

  • 目的:解决企业应用开发的复杂性

  • 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

  • 范围:任何Java应用

优点:

开源的免费的框架(容器)

Spring是一个轻量级、非入侵式的框架

控制反转(IOC)和面向切面(AOP)的容器框架

支持事务的处理,对框架整合的支持

官网:https://spring.io/

GitHub:https://github.com/spring-projects/spring-framework


Maven

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.4.RELEASE</version>
</dependency>

spring 七大模块

IOC 理论

IoC 全称为 Inversion of Control,即“控制反转”,Spring 的核心内容之一,是一种通过描述(xml 或 注解)并通过第三方获取特定对象的方式,Spring 中实现控制反转的是 IoC 容器,其实现方式是 DI(Dependency Injection),即依赖注入。

  1. 谁控制谁:在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IOC 容器后,则直接由 IoC 容器来控制。所以“谁控制谁”,当然是 IoC 容器控制对象。
  2. 控制什么:控制对象。
  3. 为何是反转:没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转。
  4. 哪些方面反转了:所依赖对象的获取被反转了。

IoC创建对象

通过xml创建对象

<?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 id="he" class="com.youzi.pojo.Hello">
        <property name="Str" value="Hello Spring!"/>
    </bean>
</beans>
public class Hello {
    private String Str;

    public Hello(String str) {
        Str = str;
    }

    public Hello() {
    }

    public String getStr() {
        return Str;
    }

    public void setStr(String str) {
        Str = str;
    }
}
...
@Test
public void test() {
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    Object he = context.getBean("he");
    System.out.println(he);   
}

引用了其他对象的赋值方式:

<bean id="userservice" class="com.youzi.service.UserServiceImpl">
    <property name="user" ref="user"/>
</bean>

没有参数直接初始化

<bean id="user" class="com.youzi.dao.UserImpl"/>

以上方式调用了对应类中的无参构造和 setter,即需要初始化的参数或者对象必须有对应的 setter,如果要调用有参构造可以使用 <constructor-arg> 通过类型、下标、参数名字、引用这几种方式传参

使用构造器

public Users(Hello hello, String num) {
    this.hello = hello;
    this.num = num;
}
<bean id="users" class="com.youzi.pojo.Users">
    <!--<constructor-arg type="java.lang.String" value="1"/>-->
    <!--<constructor-arg index="1" value="2"/>-->
    <constructor-arg name="num" value="3"/>
    <constructor-arg ref="he"/>
</bean>

spring基本配置

别名,给对象创建另一个名字,可创建多个(别名也可以通过 bean 中的 name 创建)

<bean id="he" class="com.youzi.pojo.Hello" name="hello3,hello4">
    <property name="Str" value="Hello Spring!"/>
</bean>

<alias name="he" alias="hello1"/>
<alias name="he" alias="hello2"/>

bean 对象默认创建的为单例模式,可以通过 scope="prototype" 修改,这样 hello3,hello4 就是两个不同的对象了

导入其他的xml

上面只是基本的配置,每个配置里面还有很多的细节配置待以后再进一步的学习


猜你喜欢

转载自www.cnblogs.com/wangjr1994/p/12514704.html